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

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

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

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

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

【问题讨论】:

    标签: cocoa-touch rotation autorotate


    【解决方案1】:

    您有三个选择:

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

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

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

    【讨论】:

    • 谢谢...查看了现在应该做的自动调整掩码:)。 :)
    • 只是补充:如果您正在编写自己的 UIView 包含控制器。您可以覆盖willLayoutSubviews:didLayoutSubviews: 以在设备旋转时收到通知。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-08-21
    • 2021-09-27
    • 2017-10-09
    • 1970-01-01
    相关资源
    最近更新 更多