【问题标题】:Changing the NavigationBar's height in 'viewDidAppear' and 'viewDidLoad', Why is it different?在 'viewDidAppear' 和 'viewDidLoad' 中改变 NavigationBar 的高度,为什么不一样?
【发布时间】:2015-08-06 09:17:13
【问题描述】:

我只是想降低 NavigaitonBar 的高度。

我将以下代码放入 ViewDidLoad 中,然后运行该项目。高度瞬间改变,但很快又恢复到默认高度。

CGRect navRect  = self.navigationController.navigationBar.frame;
navRect.size.height = 30;
self.navigationController.navigationBar.frame = navRect;

我尝试将这些代码放在 viewWillAppear 中,同样的问题又发生了!

但是在viewDidAppear中,它工作正常,高度被改变了。

我总是在 viewDidLoad 中添加一些 barButtonItem。说明在viewDidLoad中已经成功初始化了NavigationController,但是为什么不能改变高度呢?

这让我困惑了很长时间。

谢谢!

【问题讨论】:

  • 将代码粘贴到 -viewDidLayoutSubview
  • @RoNiT 我这里没有代码。以及上面我给出的几乎所有代码。
  • 我的意思是,在 -viewDidLayoutSubviews 中更改 heightConstraint
  • @RoNiT 启动顺序是 'viewDidLoad' -> 'viewDidLayoutSubviews' -> 'viewWillAppear' -> 'viewDidAppear',我想知道为什么改变高度的代码只在viewDidAppear有效?

标签: ios objective-c uinavigationbar viewdidload viewdidappear


【解决方案1】:

由于添加了自动布局,视图的生命周期也发生了变化。 视图中子视图的所有几何修改都应在viewDidLayoutSubviews 方法中完成。 从这个方法的名称可以看出,这意味着在调用这个方法的那一刻,所有的子视图都已经正确放置。

【讨论】:

  • 我用纯代码和storyboard试过了,没意义,我给的代码只在viewDidAppear中可以正常工作,太诡异了。
【解决方案2】:

如果您的表每次都需要使用新数据加载数据,那么它应该在 viewWillAppear 下 否则,如果表格需要由一个不变的 Data 重新加载,或者没有对 Data 执行任何编辑操作,则应使用 viewDidload

【讨论】:

    猜你喜欢
    • 2014-09-11
    • 1970-01-01
    • 1970-01-01
    • 2020-11-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多