iOS 开发:为啥 self.navigationController.navigationBar.frame.size.height 返回零?

Posted

技术标签:

【中文标题】iOS 开发:为啥 self.navigationController.navigationBar.frame.size.height 返回零?【英文标题】:iOS Dev: Why does self.navigationController.navigationBar.frame.size.height return zero?iOS 开发:为什么 self.navigationController.navigationBar.frame.size.height 返回零? 【发布时间】:2012-09-21 13:54:47 【问题描述】:

我有一个带有导航栏的模式弹出视图,当我尝试使用语句从当前加载的视图访问该导航栏的高度时...

self.navigationController.navigationBar.frame.size.height;

...它返回 0。为什么会这样?

非常感谢您的智慧!

【问题讨论】:

你使用什么格式参数(即%@, %llu) 【参考方案1】:

这可能是因为您在表达式中使用的对象之一是nil

例如,这可能是self.navigationController 本身。也许您误解了视图层次结构? (尝试NSLog(@"%@", self.navigationController);检查是否为nil并确定)

【讨论】:

【参考方案2】:

不知道为什么,如果你什么都没做,导航栏的高度总是 44 像素

【讨论】:

这不是真的。在 iPhone 上的 Landscape more 中,NavigationBar 的高度与 Portrait 模式下的高度不同。 是的,很抱歉横向是 32 此外,在代码中使用幻数是不好的做法,比如硬写值。我们已经看到,Apple 可以更改操作系统和手机本身的内容(例如,在他们的代码中硬写 480 广告屏幕高度的每个人今天都搞砸了,而使用 view.window.screen.applicationFrame.size.height 仍然在任何地方返回正确的值) ,因此无法保证 Apple 不会在未来的 ios 版本中更改 NavBar 的高度。因此,像 OP 一样尝试获取值而不是对值进行硬编码是一种更好的做法。 :) 好的,你是对的......但如果你想改变外观,知道这些值仍然很好:)(这里不相关,但仍然!)

以上是关于iOS 开发:为啥 self.navigationController.navigationBar.frame.size.height 返回零?的主要内容,如果未能解决你的问题,请参考以下文章

IOS开发 为啥要用block

iOS 开发:为啥 self.navigationController.navigationBar.frame.size.height 返回零?

为啥使用开发或企业证书签名的 iOS 应用启动速度较慢?

ios开发为啥mjheader为啥刷新完了回不去了

为啥在 iOS 中使用 NSUserDefaults?

iOS开发Facebook直播,为啥只能获取直播评论id,无法直接获取评论人昵称