UITableView header 内容器视图的自动布局约束因不同设备而损坏

Auto Layout constraints for container view inside UITableView header broken for different devices

我有一个对我来说没有意义的问题。我有以下设置:

| UITableView |

|| UITableView header ||

||| UIView |||

所以在我的 UITableView header 中,我有一个容器视图,它的父视图具有前导、尾随和顶部约束。一切都针对我的测试设备大小(即 iPhone 8)进行了正确设置。如果我将测试设备更改为 iPhone 8 Plus,我会得到一个奇怪的尾随约束偏移量 - 右边缘 39pt,这正是 iPhone 8 加上点宽度和 iPhone 8.

当我在 Xcode 中的设备之间切换并发现尾随约束不正确时,我只是自己进行了调整(将尾随更改为 1,然后再更改为 0),问题就消失了设备。

最初我认为这是 Xcode 中的错误,但当我在设备上测试时问题仍然存在。

我尝试设置一个新的视图控制器并添加相同的元素但没有效果。

我附上屏幕截图以使我的问题更清楚。

之前:调整所需的约束

之后: 切换到不同大小的设备

将此添加为答案是因为评论太多了 - 尽管它实际上只是一种确认,而不是解决方案。

好的 - 查看了您的项目。

我会说这是一个 IB / Storyboard 错误,我在其他情况下也见过这种错误。如果您更改 View As... 设备,框架不会立即更新。

但是,如果您更改任何会导致布局更新的内容 - 例如临时更改视图的背景颜色或标签的字体大小 - 一切都应该卡入到位。

您还会注意到,如果您 select 一个元素并稍微移动它,Update Frames 按钮/菜单项就会启用...这也会正确更新框架。

注意: 当我 运行 应用程序时,无论布局在 Storyboard 中的外观如何,约束在 运行 时正确调整视图大小.

起初我接受了 DonMag 的回答(感谢您的宝贵时间),因为这似乎确实是一个 Xcode Interface Builder 错误。当我进一步调查我提到的场景时,自动布局约束不会在我需要时更新布局,因此没有给我正确的 view.bounds

我尝试在 viewDidLayoutSubviews() 中获取它,但也没有成功 - 它仍然为我提供了适合其他设备的尺寸。

诀窍是在使用视图边界之前调用 view.layoutIfNeeded()。它所做的是立即更新视图的布局。因此,您可以访问所需视图的边界。