【问题标题】:Using AutoLayout to just rotate a View使用 AutoLayout 仅旋转视图
【发布时间】:2013-06-26 07:36:12
【问题描述】:

使用 AutoLayout,是否可以将视图(按钮、图像等)保留在同一位置,但在设备旋转时只需将其旋转 90 度?

例如,在以下图像中,视图与它们在纵向放置时完全相同(与边缘的距离相同),但在横向中旋转。

【问题讨论】:

  • 您是否允许更改界面方向?还是你只是告诉系统你支持纵向?

标签: ios objective-c autolayout


【解决方案1】:

您将提供的图像中的视图描述为“停留在完全相同的位置”,但我认为这是对自动布局和旋转行为的误解。您的布局在两个示例之间发生了显着变化。之前两个视图都沿其左边缘对齐,现在它们沿其底部边缘对齐。

基本上:当您旋转设备时(比如说从标准纵向到 home-left-landscape),您更改的是顶部视图,而不是顶部视图指向的方向。

如果您想重新创建您提供的旋转视图的外观,您有几个选择。我建议查看visual formatting language,这是一种以编程方式添加约束的好方法......它看起来更容易。如果您想要一个好的介绍,请查看 WWDC 2012 的 iOS 自动布局演讲。然后,您可以在设备旋转时添加和删除适当的约束。 (可能需要玩一些)。 View Controller Programming Guide 中关于“creating a custom landscape orientation”的部分可能会有所帮助。

【讨论】:

    【解决方案2】:

    如果您允许界面方向旋转,那么您必须更改旋转约束以将视图放置在您想要的位置。

    如果您不允许界面方向旋转,则必须订阅设备方向更改通知。当方向改变时,您可以更新视图的变换以旋转它们。如果视图是方形的,那就足够了。如果视图不是方形的,您还需要根据旋转的框架修改约束。

    【讨论】:

    • 感谢您的回答。我允许界面方向从纵向旋转到横向。我需要改变哪些限制?
    • 您需要更改所有影响视图位置和大小的约束。自动布局在这里不会对您有任何帮助。基本上,您需要将所有水平约束更改为垂直约束,反之亦然。由于您无法更改现有约束的大多数属性,这实际上意味着删除所有旧约束并创建新约束。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多