2

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

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

4

2 回答 2

6

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

someView.autoresizingMask = UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleHeight;

UIView 文档

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

如果您将 autoresizingMask 设置为 None 以外的值,则意味着该layoutSubviews方法总是在视图边界发生变化时被调用。

于 2013-02-21T15:37:31.587 回答
3

我不确定它是否完全相同,但我遇到了类似的问题。我正在使用 UISplitViewContoller(来自 Xcode 的模板)并将子视图添加到 DetailViewController 中。layoutSubviews 方法没有在旋转时被调用,因为它是 ViewController 中主 UIView 的子视图。所以我将它添加到 DetailsViewController 以使其工作(detailView 是我的子视图):

- (void)didRotateFromInterfaceOrientation:(UIInterfaceOrientation)fromInterfaceOrientation {
    [super didRotateFromInterfaceOrientation:fromInterfaceOrientation];
    if (detailView != nil) [detailView layoutSubviews];
}
于 2011-05-25T20:04:13.133 回答