“刷新”设备旋转视图

Posted

技术标签:

【中文标题】“刷新”设备旋转视图【英文标题】:"refresh" view on device rotation 【发布时间】:2010-09-23 11:42:25 【问题描述】:

我在viewDidLoad 中设置了我的视图。所有不同的框架等子视图都已相对于self.view 定义。因此,self.view 的大小无关紧要,子视图总是会缩小或扩大以适应(原样)。

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

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

有什么办法可以刷新子视图的框架之类的吗?老实说,我不知道其他人做了什么。我是否必须将所有视图作为属性放入 .h 文件中,并在 didRotate... 上手动执行所有操作?

【问题讨论】:

【参考方案1】:

您有三个选择:

    如果自动调整大小掩码足以定位您的视图,请在创建每个子视图时为其分配正确的自动调整大小掩码。

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

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

【讨论】:

谢谢...查看了现在应该做的自动调整掩码:)。 :) 只是补充:如果您正在编写自己的 UIView 包含控制器。您可以覆盖willLayoutSubviews:didLayoutSubviews: 以在设备旋转时收到通知。

以上是关于“刷新”设备旋转视图的主要内容,如果未能解决你的问题,请参考以下文章

Swift:如何在设备旋转后刷新UICollectionView布局

学习笔记:下拉刷新的视图和图标的旋转

当用户改变设备方向时,如何只旋转导航栏而不旋转视图?

设备旋转时切换视图控制器

iOS 无法在设备旋转时自动调整子视图大小

显示模态视图控制器时设备旋转