使用 Xcode 4.2/iOS5.0
我有一个 viewController 和一个关联的 viewController.xib。 viewController 被设置为 .xib 文件的所有者。它是从 UINavigationController
调用的。
当设备纵向/横向旋转时,我正在尝试一些手动布局
据我了解,要覆盖的 UIView
方法是
- (void)layoutSubviews;
这是您进行布局的地方
但是 - 与
drawRect
一样 - 你不直接调用它,它会在适当的时候被 iOS相反,您调用
setNeedsLayout
...所以我在 ViewController 中有这个
- (void)didRotateFromInterfaceOrientation:(UIInterfaceOrientation)
fromInterfaceOrientation {
[[self view] setNeedsLayout];
}
在同一个 ViewController 我有这个
- (void)layoutSubviews {
//.manual override of automatic layout on rotation
NSLog(@"layoutSubviews");
}
但是
layoutSubviews
没有被调用,我不明白为什么。这里有个线索...
如果我直接将
layoutSubviews
称为 [self layoutSubviews]
- (void)didRotateFromInterfaceOrientation:(UIInterfaceOrientation)
fromInterfaceOrientation {
[self layoutSubviews];
}
它确实触发
但如果我称它为
[[self view] layoutSubviews]
它不会所以看起来 View 和它的 Controller 没有正确连接?
最佳答案
你的问题是你已经在你的 View Controller 上实现了 -layoutSubviews
,而不是你的 View 。它永远不会被这样称呼。 -layoutSubviews
是一种机制,自定义 View 可以通过这种机制布局自己的 subview (例如,UIButton
具有图像的 UIImageView
和标签的 UILabel
,并使用 -layoutSubviews
确保 ImageView 和标签都正确定位)。它不是 View Controller 可以控制其 View 布局的机制。
如果您想在旋转时更改布局,那么您应该继续并在 -didRotateFromInterfaceOrientation:
内部设置新布局。
关于iphone - 未调用 UIView layoutSubviews,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/8192072/