Я могу опоздать, но У меня есть решение, которое работает. Это даже работает для iOS 8+ splitViewController.preferredDisplayMode = UISplitViewControllerDisplayModeAllVisible ; и плавно перемещается при нажатии кнопки переключения на весь экран.
Вот трюк:
первый подкласс UISplitViewController.m
В шапке добавить следующий:
@property (strong, nonatomic) UIView *fakeNavBarBGView;
В методе viewDidLoad добавьте следующий код:
CGFloat fakeNavBarWidth = 321; // It is important to have it span the width of the master view + 1 because it will not move when the split view slides it's subviews (master and detail)
CGFloat navbarHeight = self.navigationController.navigationBar.frame.size.height + 20;
self.fakeNavBarBGView = [[UIView alloc] initWithFrame:CGRectMake(0, 0, fakeNavBarWidth, navbarHeight)];
self.fakeNavBarBGView.backgroundColor = [UIColor redColor];
// Add Fake navbar to back of view
[self.view insertSubview:self.fakeNavBarBGView atIndex:0];
// SplitView Controller
UISplitViewController *splitViewController = self;
DetailViewController *detailVC = [navigationController.viewControllers lastObject];
detailVC.fakeNavBarSubView = self.fakeNavBarBGView;
detailVC.SVView = self.view;
В DetailViewController.h добавить следующее:
@property (strong, nonatomic) UIView *SVView;
@property (strong, nonatomic) UIView *fakeNavBarSubView;
Теперь вот последний трюк: в DetailViewController.m добавьте следующее в метод viewDidLoad (вызывается каждый раз, когда вы щелкаете по главной таблице):
[self.SVView sendSubviewToBack:self.fakeNavBarSubView];
[self.SVView bringSubviewToFront:self.view];
Запустите его и наблюдайте за магией; -)