可以在旋转时自动调整视图的大小以尽可能大吗?

Posted

技术标签:

【中文标题】可以在旋转时自动调整视图的大小以尽可能大吗?【英文标题】:Possible to auto resize view to be as large as possible upon rotation? 【发布时间】:2014-07-02 13:48:14 【问题描述】:

当手机处于纵向时,我进行了以下设置:

当我将手机旋转到横向时,我希望 view1 按比例调整自身大小,使其尽可能适合屏幕,如下所示:

我知道如何使用代码手动执行此操作,但我想知道是否可以设置某种自动设置,以便在手机旋转或视图控制器时视图会知道以这种方式布局是横向还是纵向呈现?

【问题讨论】:

【参考方案1】:

您可以:

    为您的视图定义一个autoresizingMask;或者,

    定义AutoLayout constraints。

您无需指定如何创建视图,无论是在 Interface Builder 中还是以编程方式。

如果您使用 Interface Builder,只需单击您的视图。如果您不使用自动布局,请转到“尺寸检查器”,并在其中以图形方式设置适当的弹簧(见下图)。

如果您使用 Auto Layout,则转到 Editor/Pin 并将前导/尾随/顶部/底部空间固定到超级视图。一开始,自动布局可能看起来有点棘手。您可以在 http://www.raywenderlich.com/50317/beginning-auto-layout-tutorial-in-ios-7-part-1 查看。

如果您以编程方式创建视图,则可以通过设置视图的 autoresizingMask 属性或向其添加约束来获得相同的结果。

这是使视图适应其父视图的边界的方法:

NSDictionary* views = NSDictionaryOfVariableBindings(_subview);

[self.view addConstraints:
 [NSLayoutConstraint constraintsWithVisualFormat:@"H:|-16-[_subview]-16-|"
                                         options:0
                                         metrics:nil
                                           views:views]];
[self.view addConstraints:
 [NSLayoutConstraint constraintsWithVisualFormat:@"H:|-0-[_subview]-0-|"
                                         options: 0
                                         metrics:nil
                                           views:views]];

请注意,我还指定了固定填充 (-16-) 或完全不填充 (-0-)。

你可能还需要打电话

self.view.translatesAutoresizingMaskIntoConstraints = NO;
_subview.translatesAutoresizingMaskIntoConstraints = NO;

避免可能的约束冲突(取决于可与视图关联的自动调整掩码)。

【讨论】:

谢谢。您能否添加一个示例,说明如何使用约束来完成? 你的意思是编程吗? 是的,对不起,我一直忘记提及,我以编程方式完成所有操作。

以上是关于可以在旋转时自动调整视图的大小以尽可能大吗?的主要内容,如果未能解决你的问题,请参考以下文章

Xcode 自动布局和旋转

CollectionView 标头不会在自动旋转时调整大小

UITextContainerView 仅在以大于 45° 的角度旋转时才调整为他的 UITextView 超级视图的大小

在自定义容器视图中旋转时 AutoLayout 不会调整视图大小?

我们可以将具有自动布局的 XIB 加载为以编程方式创建的没有自动布局的视图的子视图,并使用父视图调整子视图的大小吗?

以编程方式创建UIView,在旋转设备时保留其大小