ios – 在UISplitViewController的主视图中未调用viewWillAppear

前端之家收集整理的这篇文章主要介绍了ios – 在UISplitViewController的主视图中未调用viewWillAppear前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我有一个带有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
}

希望这可以帮助某人.

猜你在找的iOS相关文章