【问题标题】:Strange behaviour in object-c IOS 8 on method callingobject-c IOS 8中关于方法调用的奇怪行为
【发布时间】:2015-05-08 10:38:13
【问题描述】:

我有一个视图控制器

- (BOOL)prefersStatusBarHidden {
     return YES;
}

之前被调用
- (void)viewDidLoad
{
   [super viewDidLoad];
}

我是另一个视图控制器,首先调用viewDidLoad,然后调用prefersStatusBarHidden

我希望在viewDidLoad 之前调用prefersStatusBarHidden

请帮忙!

【问题讨论】:

  • 我不认为你对调用顺序有任何影响。你需要那个订单做什么?
  • 不能保证先调用哪个。
  • 我需要这个。我在设置视图之前设置了一些视图,我希望隐藏状态栏。这是一个动画应用程序。使用状态栏,初始化会出现一些设计失真。
  • 您知道当视图控制器出现在屏幕上时您的状态栏将被隐藏。考虑到这一点还不足以设置您的动画吗?
  • 其实不是这样的。第一个视图出现,然后状态栏被隐藏。

标签: ios objective-c uistatusbar


【解决方案1】:

对于标签栏控制器中的简单视图控制器,我得到了 iOS 8.3 的这个订单

13:57:46.610 loadView
13:57:46.612 viewDidLoad
13:57:46.612 updateViewConstraints
13:57:46.613 viewWillLayoutSubviews
13:57:46.613 viewDidLayoutSubviews
13:57:46.614 viewWillAppear:
13:57:46.616 prefersStatusBarHidden
13:57:46.616 viewWillLayoutSubviews
13:57:46.616 viewDidLayoutSubviews
13:57:46.712 viewDidAppear:

您看到viewWillLayoutSubviews/viewDidLayoutSubviews 调用两次的原因是,任何过渡动画都在其间发生。

我希望如果有动画,状态栏的消失也会被动画化,这可能是对 prefersStatusBarHidden 的调用发生在那里的原因。

所以无论你想在viewDidLoad 做什么都更适合viewWillLayoutSubviewsviewDidLayoutSubviews

我使用了这个代码:https://github.com/vikingosegundo/ofaexample/blob/298c56346f49c467c9f54e9cf18cd5ec604c1fdc/OFAExample/SecondViewController.m

【讨论】:

    【解决方案2】:

    这似乎是调用方法的顺序:

    1. initWithCoder:
    2. awakeFromNib
    3. willMoveToParentViewController:
    4. prefersStatusBarHidden
    5. preferredStatusBarUpdateAnimation
    6. 加载视图
    7. prepareForSegue:发件人:
    8. viewDidLoad
    9. extendedLayoutIncludesOpaqueBars
    10. edgesForExtendedLayout
    11. viewWillAppear:

    ...

    来源:https://bradbambara.wordpress.com/2014/07/31/object-life-cycle-uiviewcontroller/

    所以你需要重新考虑你的架构,这样你就不会假设 viewDidLoadprefersStatusBarHidden 之前被调用

    【讨论】:

    • 奇怪的断点 viewDidLoad 在 prefersStatusBarHidden 之前被调用,这就是我要解决的问题。
    • 你确定是同一个viewController吗?你能检查堆栈跟踪,它们不是从其他地方手动调用的吗?
    • 是的,它是同一个视图控制器。
    • 你已经验证了它们不是手动调用的?与视图控制器或它的显示方式有何不同?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-01-24
    • 2012-08-28
    • 2016-05-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多