正如标题所说:我创建一个空的UIView子类并向其添加一个子视图,我创建一个空的layoutSubviews方法,然后在那里添加一个断点。然后我构建项目,并在layoutSubviews方法中加载视图时停止模拟。到目前为止一切都很好。我继续模拟并旋转设备(假设视图控制器设置为允许任何方向)但是layoutSubviews永远不会再次调用,尽管我可以看到我的对象是如何旋转的。 有什么想法吗?
好的,我将简化我的问题:如何使用一些子视图创建自定义UIView并使其响应设备方向?我不需要使用drawRect或任何东西,只需子类UIView,添加几个子视图并在设备旋转时处理它们。
答案 0 :(得分:6)
您是否尝试在UIView上设置autoresizingMask?例如,如下所示:
someView.autoresizingMask = UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleHeight;
'当视图的边界发生变化时,该视图会自动调整其大小 根据每个子视图的自动调整掩码'
的子视图
如果将autoresizingMask设置为None以外的值,则应该意味着在视图边界发生更改时始终会调用layoutSubviews
方法。
答案 1 :(得分:3)
我不确定它是否完全相同,但我遇到了类似的问题。我使用的是UISplitViewContoller(来自Xcode的模板)并在DetailViewController中添加了一个子视图。 layoutSubviews方法没有在旋转时被调用,因为它是ViewController中主要UIView的子视图。所以我将它添加到DetailsViewController以使其工作(detailView是我的子视图):
- (void)didRotateFromInterfaceOrientation:(UIInterfaceOrientation)fromInterfaceOrientation {
[super didRotateFromInterfaceOrientation:fromInterfaceOrientation];
if (detailView != nil) [detailView layoutSubviews];
}