尽管有任何设备轮换,layoutsubviews仅调用一次

时间:2011-02-17 15:54:58

标签: iphone uiview rotation layoutsubviews

正如标题所说:我创建一个空的UIView子类并向其添加一个子视图,我创建一个空的layoutSubviews方法,然后在那里添加一个断点。然后我构建项目,并在layoutSubviews方法中加载视图时停止模拟。到目前为止一切都很好。我继续模拟并旋转设备(假设视图控制器设置为允许任何方向)但是layoutSubviews永远不会再次调用,尽管我可以看到我的对象是如何旋转的。 有什么想法吗?

好的,我将简化我的问题:如何使用一些子视图创建自定义UIView并使其响应设备方向?我不需要使用drawRect或任何东西,只需子类UIView,添加几个子视图并在设备旋转时处理它们。

2 个答案:

答案 0 :(得分:6)

您是否尝试在UIView上设置autoresizingMask?例如,如下所示:

someView.autoresizingMask = UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleHeight;

来自UIView documentation

  

'当视图的边界发生变化时,该视图会自动调整其大小   根据每个子视图的自动调整掩码'

的子视图

如果将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];
}