У меня проблема. Мое приложение - это контроллер панели вкладок, а его первый контроллер представления - это контроллер разделенного представления. Кажется, это не подходит для Apple, потому что в документах говорится, что контроллер разделенного voew должен быть корнем, так что, возможно, это причина моих проблем.
Проблема в том, что иногда не вызывается willHideViewController из UISplitViewControllerDelegate, поэтому верхняя/левая кнопка иногда не создается, что раздражает. Я понял, чтобы воспроизвести эту ошибку, попробуйте несколько раз это: -Ландшафтный режим. -Выберите вкладку, отличную от касания контроллера разделенного вида. -Переместите iPad в книжную ориентацию на этой вкладке. - Перейдите на вкладку контроллера разделенного представления, и иногда willHideViewController не вызывается, поэтому вы не увидите верхнюю кнопку. Однако, если я поверну свой iPad в альбомную ориентацию, а затем в портретную, это будет исправлено.
Я попытался вручную выполнить несколько вращений, чтобы обойти эту проблему, но безуспешно. Мне все еще нужно попробовать любой класс клонирования контроллера с разделенным представлением из github или подобного. Есть ли у вас идеи, что происходит или какие-либо обходные пути?
Здесь я покажу вам два примера, работающих правильно.

Большое спасибо за помощь.
Ответ 1 · CracyD
Где вы устанавливаете делегата splitViewControllers? Возможно, вы можете установить делегата при загрузке вкладки. Похоже, вы установили его только после одного поворота?
В противном случае см. этот пример
Здесь у них TableViewController является делегатом splitviewcontroller. Возможно, вы могли бы сделать то же самое с TabBarController?
Ответ 2 · Snips
Я пришел к выводу, что это невозможно сделать каким-либо способом, который я считаю "достаточно" законным. Можно разочароваться, но проблема с распространением willShow..., willHide на контроллеры разделенного представления на каждой вкладке остается.
Решение, которое, скорее всего, сработает,
https://github.com/grgcombs/IntelligentSplitViewController/blob/master/IntelligentSplitViewController.m
Хотя этот код, несомненно, умен, для меня он слишком "побочный". Я подозреваю (но не знаю), что недостаточно просто вызвать методы делегата. Конечно, сам UISplitViewController должен изменить свое внутреннее состояние, а также вызвать методы делегата? Этот метод "просто" вызывает методы делегата при изменении ориентации.
Итак... Я выбрал более законное решение, которое заключается в использовании нового метода, представленного в iOS 5.
- (BOOL) splitViewController:(UISplitViewController *)svc
shouldHideViewController:(UIViewController *)vc
inOrientation:(UIInterfaceOrientation)orientation
{
return NO;
}
Итак, мастер-меню никогда не скрывается, а значит и проблемы с управлением поповером не возникает.
Конечно, это все еще не совсем "законно", поскольку оно по-прежнему включает в себя UISplitViewController, которые не находятся на верхнем уровне (UISplitViewController находится на верхнем уровне, а разделенные представления находятся на каждой вкладке).
Удачи с любым решением, которое вы выберете.
Я обновлю этот ответ, когда подтвержу, что Apple одобрит приложение, использующее это решение.