为什么UIView比Screen宽

时间:2016-04-27 10:04:44

标签: ios uiviewcontroller autolayout interface-builder size-classes

我已经使用界面构建器创建了一个视图控制器,同时启用了大小类。

视图对其超视图有前导和尾随约束,这是视图控制器的视图。像这样的东西。

| - (14) - (视图) - (14) - |

当我运行应用程序它看起来很棒时,视图在两侧都有14pt的插图,但是当我打印它的宽度时,我得到576,它比屏幕宽度宽。在界面构建器中,视图的框架宽度设置为576(作为打开大小类时的画布大小)但在运行时,约束应该覆盖此我猜。

视图如何显示正确,但它的框架显示更大的宽度?

2 个答案:

答案 0 :(得分:1)

什么时候打印宽度?我猜在ViewDidLoad中。因为您使用Interface Builder并启用大小类,所以默认情况下,宽度和高度为600x600。在视图加载时,大小仍然从“接口”构建器引用大小,直到视图出现,它将根据屏幕大小自动缩放。这就是为什么你的UIView比屏幕宽。

以下是我从使用“界面”构建器构建的视图控制器中打印出来并启用大小类的内容。在iPhone 6S plus上运行

视图中的

[大小]确实已加载{{0,0},{600,600}}

视图中的

[大小]确实显示{{0,64},{414,623}}

答案 1 :(得分:0)

您可以使用以下方法更新视图:

//允许您在绘图周期发生之前执行布局。 layoutIfNeeded提前布局

[view setNeedsLayout];

[view layoutIfNeeded];