我有一个带有master和detail的splitvew控制器(在storyboard中设置),我在主viewController中将preferredDisplayMode设置为UISplitViewControllerDisplayModeAllVisible.
我在主视图控制器上有这些方法:
- (void) viewDidAppear:(BOOL)animated { [super viewDidAppear:animated]; //This is called } - (void)viewWillAppear:(BOOL)animated { [super viewWillAppear:animated]; //This is not called [self.searchController.searchBar sizeToFit]; [self configNavBar]; //Adds few buttons to the nav bar }
我想知道为什么不在这里调用viewwillAppear但是调用viewDidLoad,viewDidAppear. viewWillAppear中的断点未命中.
如果我将首选显示模式设置为UISplitViewControllerDisplayModePrimaryOverlay,则会调用viewWillAppear.
但是这里细节视图控制器不占用半屏.
解决方法
我知道它是旧的,但我在这里遇到同样的问题.在iPad上没有问题,viewWillAppear被调用,但在iPhone上,我第一次显示控制器时根本没有调用它.
if let target = displayModeButtonItem.target,let action = displayModeButtonItem.action { UIApplication.shared.sendAction(action,to: target,from: view,for: nil) }
在我的UISplitViewController初始化之后调用.
当我删除它时,它工作.但是我也可以通过在iPhone上使用模式:.primaryHidden来绕过它(我不会在风景上使用iPhone,这就是为什么我这个例子的条件将是iPhone / iPad).所以我的自定义UISplitViewController看起来像这样:
override func viewDidLoad() { super.viewDidLoad() self.preferredDisplayMode = UIDevice.current.userInterfaceIdiom == .pad ? .allVisible : .primaryHidden }
希望这可以帮助某人.