Я знаю, что это старый вопрос, но вот хак, который я только что использовал, чтобы обойти эту проблему для любого, кто имеет навигационную иерархию, подобную моей:
UITabBarController
Tab0->UINavigationController->MGSplitViewController _or_ UISplitViewController
Tab1->UINavigationController->SomeOtherViewController
Tab2->Etc...
Ничто из того, что я пытался, не могло избавиться от этогоРазрыв в 20px, который появляется только один раз при загрузке, если ориентация устройства - что-либо кроме UIInterfaceOrientationPortrait.Разрыв в 20 пикселей вызван UINavigationBar для вышеприведенного UINavigationController разделенного представления, имеющего ненулевое значение origin.y;скорее всего, вы найдете его 20.
Кроме того, я обнаружил, что это проблема, только если устройство работает под управлением iOS <5.0. </p>
Я проверяю эту проблему впросмотреть код контроллера моего MGSplitViewController (то есть self = MGSplitViewController):
- (void)didRotateFromInterfaceOrientation:(UIInterfaceOrientation)fromInterfaceOrientation
{
if(self.doIOS4OneTimeRotationHack == YES)
{
self.doIOS4OneTimeRotationHack = NO;
for(UINavigationController *navController in [self viewControllers])
{
if(navController.navigationBar.frame.origin.y != 0.0f)
{
[UIView animateWithDuration:0.01
delay:0.0
options:UIViewAnimationOptionCurveEaseOut
animations:
^(void)
{
navController.navigationBar.frame = CGRectMake(navController.navigationBar.frame.origin.x,0.0f, navController.navigationBar.frame.size.width,navController.navigationBar.frame.size.height);
}
completion:
^(BOOL finished)
{
//NSLog(@"Shifted navbar 0x%x up!",navController.navigationBar);
}];
}
}
}
}
Если анимация завершается всего за 0,01 секунды, это происходит так быстро, что вы даже не заметите ее как всплеск загрузкиэкран исчезнет, и ваш MGSplitViewController вид появится на своем месте.Возможно, поиграйте с этим и сделайте это мгновенно;Мне нужно было заставить его работать и перейти к следующему заданию, так что я не стал дурачиться с этим до конца.
Мне не нравится прибегать к подобным взломам, но это был единственный способ, которым я былудалось обойти эту проблему.Приведенное ниже решение Скотта звучало замечательно, но, к сожалению, у меня не сработало.