我的示例故事板中的这个文档大纲显示了我正在使用的内容。
我有一个自定义容器视图控制器和两个通过嵌入segues连接的内容视图控制器。
这是故事板本身。
ZetaViewController必须创建一些编程视图(当然在ZetaView中)。我注意到当我将这些以编程方式创建的视图居中时,它们似乎真的偏离了中心。
ZetViewController通过检查 self.view.bounds.size.height 和 self.view.bounds.size.width 并做一些适当的算术来集中处理。
当我将调试日志记录添加到ZetaViewController时,我注意到 self.view.bounds.size.height 和 self.view.bounds.size.width 的维度相等到ContainerView(768 x 1004)和不 ZetaView(728 x 637)。 IB中的Size Inspector确认了这些值。
我为ZetaView的标记属性创建了一个独特的值并记录下来。 ZetaViewController.view 真的是ZetaView,因为标签值确认了它。
那是怎么回事?为什么在故事板和大小检查器中以较小尺寸显示的ZetaView在运行时显示其属性中的错误值?
答案 0 :(得分:5)
我的问题与Storyboard,segues或自定义容器视图控制器与内容视图控制器无关。它与iOS 5中引入的新Cocoa Auto Layout功能有关。
我的问题来自检查viewDidLoad
中的视图边界大小而不是viewWillLayoutSubviews
中的视图边界大小。在调用viewDidLoad
时,视图控制器的视图尚未给出其正确的大小。当我将以编程方式将视图居中的代码移动到viewWillLayoutSubviews
时,它按预期工作。我仍在viewDidLoad
中保留视图创建代码,因为在布局更改时会重复调用viewWillLayoutSubviews
。
另请参阅适用于iOS的视图编程指南部分"Tweaking the Layout of Your Views Manually"。
答案 1 :(得分:4)
好的,我要指出我发现的一篇优秀文章:(已更新) http://kevindew.me/post/18579273258/where-to-progmatically-lay-out-views-in-ios-5-and
在自动布局完成其魔法之后,我在浏览视频时遇到了太多糟糕的事情。 viewDidLoad,viewWillLoad等没有正确布局。
viewWillLayoutSubviews被调用了很多次,并且状态未完全设置。但是...在viewDidLayoutSubviews中,最终所有内容都按照我的预期进行了设置。