• 设为首页
  • 点击收藏
  • 手机版
    手机扫一扫访问
    迪恩网络手机版
  • 关注官方公众号
    微信扫一扫关注
    迪恩网络公众号

iOS 12 导航栏高度错误

[复制链接]
菜鸟教程小白 发表于 2022-12-11 20:51:08 | 显示全部楼层 |阅读模式 打印 上一主题 下一主题

我正在开发一个横向的 iPad 应用程序。顶部有一个导航栏,没有状态栏,我想排列一个 UITableView 使得表格的顶部与导航栏底部的 y 坐标相同。自然,我在 viewDidLoad 中执行以下操作:

MyTableView* table = [[MyTableView alloc] init];
table.frame = CGRectMake(someX, navBar.frame.size.height, someWidth, someHeight);
[self.view addSubview:table];

此时,navBar.frame.size.height返回44。这很奇怪,因为当我运行应用程序时,我看到我的表格与导航栏的底部重叠了几个点。我做了一些调查,发现导航栏实际上是用 50 磅的高度绘制的。

我试着思考可能出了什么问题,并意识到我可能在 View Controller 的生命周期中这样做得太早了,并且 View 尚未布局,所以我重写了 viewWillAppear , viewDidAppear, 和 viewDidLayoutSubviews,都报告导航栏的高度是 44,即使它明显是用 50 的高度绘制的。

我想也许有一些我根本不知道的东西,所以我设置了一个计时器来运行一段代码,该代码块会在调用 viewDidLoad 后每秒重复打印出导航栏的高度,它允许完成任何 View Controller 的幕后设置。尽管如此,每次定时器触发打印时,高度只有 44。

我查看了界面生成器,甚至在那里,在尺寸属性窗口(右起第二个选项卡)中,它说导航栏的高度为 44。然而在界面生成器的 View Controller 的屏幕上,它显然是在高度为 50 的情况下绘制的。

我的问题是:为什么报告的高度与导航栏绘制的高度不匹配?我需要正确的高度才能将我的 table 放在正确的位置。

在这一点上,我不知道可能是什么问题,除了 API 完全被破坏了。我能想到的唯一解决方案是将导航栏定位在 -3 并将我的表格 View 44 的 y 值硬编码,导致导航栏顶部和底部的 3 个点被覆盖,这是 super janky如果可能的话,我想避免它。

现在,我知道自动布局是一个东西并且存在约束,但我喜欢在代码中手动计算我的 View 框架并且从不使用约束,这就是这个问题所在的领域。请不要给出像“你应该使用约束”这样的答案。

虽然我怀疑这是否重要,但我在 iPad Air 2 上运行 iOS 12.0.1。


我的调试:

下面是我的屏幕顶部中心部分的图像。每个矩形只是一个 UIView 设置背景颜色,y 坐标为 0,宽度为 50 点,并且彼此相距 50 点(每​​个从前一个结束的地方开始) .每个矩形从左到右的高度分别为:44、50 和 51。您可以看出导航栏的绘制高度为 50 磅,因为右侧矩形仅略高于导航栏。

nav bar height visualization


编辑:

我应该提到这个导航栏是通过拖放到 Storyboard中的 View Controller 中添加到 View Controller 中的。我仍然在 viewDidLoad 中做了一些帧恶作剧,但它并没有被动态添加到那里的 View 中。

另一个有趣的事情是:在界面生成器中,您知道帮助您排列事物的蓝色虚线吗?显然,那些与 44 点高度而不是 50 点高度对齐:

blue alignment dashes broken



Best Answer-推荐答案


花了太多时间没有进展,我最终决定硬着头皮过渡到约束。在我花了太多时间试图让他们做我想做的事(并且失败了)之后,事实证明手动布置我的观点并不是问题。在转换过程中,我删除了导航栏并将其重新添加到 View Controller ,这使得一切都开始正常工作。蓝色虚线对齐引用线与 50 点高度对齐,高度字段现在始终返回 50。

我的猜测是 Xcode 中将 Storyboard从 iOS 12 之前的导航栏(高 44 点)升级到新的 iOS 12 导航栏(高 50 点)的逻辑被破坏了,这使我的 Storyboard处于糟糕的状态认为某些地方的高度是 44,而其他地方的高度是 50。删除并重新添加它看起来已经清除了任何 44-ness 的记录,所以现在一切都正确地高了 50 点。

关于iOS 12 导航栏高度错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53404721/

回复

使用道具 举报

懒得打字嘛,点击右侧快捷回复 【右侧内容,后台自定义】
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

关注0

粉丝2

帖子830918

发布主题
阅读排行 更多
广告位

扫描微信二维码

查看手机版网站

随时了解更新最新资讯

139-2527-9053

在线客服(服务时间 9:00~18:00)

在线QQ客服
地址:深圳市南山区西丽大学城创智工业园
电邮:jeky_zhao#qq.com
移动电话:139-2527-9053

Powered by 互联科技 X3.4© 2001-2213 极客世界.|Sitemap