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

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

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

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

【问题讨论】:

    标签: ios cocoa-touch uiview uiviewcontroller


    【解决方案1】:

    您可以:

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

    2. 定义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;
    

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

    【讨论】:

    • 谢谢。您能否添加一个示例,说明如何使用约束来完成?
    • 你的意思是编程吗?
    • 是的,对不起,我一直忘记提及,我以编程方式完成所有操作。
    猜你喜欢
    • 2011-03-07
    • 1970-01-01
    • 1970-01-01
    • 2021-02-17
    • 2011-11-06
    • 1970-01-01
    • 1970-01-01
    • 2012-01-06
    • 1970-01-01
    相关资源
    最近更新 更多