【问题标题】:viewWillAppear is not called in the master view of UISplitViewController在 UISplitViewController 的主视图中未调用 viewWillAppear
【发布时间】:2017-07-13 14:49:45
【问题描述】:

我有一个带有 master 和 detail 的 splitvew 控制器(在情节提要中设置),我在 master 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。 但是这里的detail view controller不占半屏。

【问题讨论】:

    标签: ios objective-c uisplitviewcontroller


    【解决方案1】:

    我知道它是旧的,但我在这里遇到了同样的问题。在 iPad 上,没问题,viewWillAppear 被调用,但在 iPhone 上,当我第一次显示控制器时,它根本没有被调用。

    我终于发现是由于这行代码的调用:

    if let target = displayModeButtonItem.target, let action = displayModeButtonItem.action {
        UIApplication.shared.sendAction(action, to: target, from: view, for: nil)
    }
    

    在我的UISplitViewController 初始化后调用。

    当我删除它时,它起作用了。但我也能够通过使用模式绕过它:.primaryHidden 在 iPhone 上(我不在横向上使用 iPhone,这就是为什么我在这个例子中的条件是 iPhone / iPad)。所以我的自定义UISplitViewController 看起来像这样:

    override func viewDidLoad() {
        super.viewDidLoad()
        self.preferredDisplayMode = UIDevice.current.userInterfaceIdiom == .pad ? .allVisible : .primaryHidden
    }
    

    希望这可以帮助某人。

    【讨论】:

      猜你喜欢
      • 2014-03-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-08-16
      • 1970-01-01
      • 2012-02-19
      • 1970-01-01
      相关资源
      最近更新 更多