2010-09-23 52 views
6

我的观点设置为viewDidLoad。所有不同的框架和这些子视图都是相对于self.view定义的。因此,self.view的尺寸是多少并不重要,子视图将始终缩小或扩大以适应(因为它是)。设备旋转“刷新”视图

所以当我旋转我的设备时,我希望视图旋转(与shouldAutoRotateToInterfaceOrientation:...足够容易),但子视图保持相同的形状。

调用[self viewDidLoad];使所有元素都合适,​​但在前一个布局的顶部放置了一个新层(这很明显......但我只是想解释我的意思)。

有没有什么办法刷新子视图的框架或什么?我不知道别人怎么说实话。我是否必须将所有视图都作为属性放到.h文件中,并在didRotate...上手动执行所有操作?

回答

6

你有三个选择:

  1. 如果在自动口罩不够好,定位你的观点,正确的自动尺寸面具,当你创建它们分配给每个子视图。

  2. 如果自动调整掩码不足,请覆盖willAnimateRotationToInterfaceOrientation:duration:并在该方法中重新定位子视图。我将创建一个自定义方法,将方向作为参数并负责布置所有子视图。然后您可以从willAnimateRotationToInterfaceOrientation:duration:viewDidLoad中调用此方法。

  3. 你也可以创建一个自定义的UIView子类,并使你的视图控制器的视图成为这个类的一个实例。然后覆盖layoutSubviews以根据视图的大小定位所有子视图。这种方法意味着您的自定义视图管理其子视图而不是视图控制器。

+0

谢谢...看着自动调整屏蔽:)现在应该做的。 :) – 2010-09-23 13:52:30

+0

只需添加:如果您正在编写自己的UIView包含控制器。您可以覆盖'willLayoutSubviews:'和'didLayoutSubviews:'以在设备旋转时得到通知。 – 2012-01-05 11:12:43