在'viewDidAppear'和'viewDidLoad'中更改NavigationBar的高度,为什么它不同?

时间:2015-08-06 09:17:13

标签: ios objective-c uinavigationbar viewdidload viewdidappear

我只想降低NavigaitonBar的高度。

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

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

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

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

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

这让我很困惑。

谢谢!

2 个答案:

答案 0 :(得分:3)

自添加自动布局以来,视图的生命周期也发生了变化。 视图中子视图的所有几何修改都应该在viewDidLayoutSubviews方法中完成。 正如您从此方法的名称中所看到的,这意味着在调用此方法时,所有子视图都将正确放置。

答案 1 :(得分:1)

如果您的表每次都需要使用新数据加载数据,那么它应该在viewWillAppear下 否则,如果表需要通过单个数据重新加载,并且没有对Data执行任何编辑操作,则应使用viewDidload