如何使用不同屏幕的约束来调整视图的高度和宽度?

Posted

技术标签:

【中文标题】如何使用不同屏幕的约束来调整视图的高度和宽度?【英文标题】:How to resize height & width of the view using constraints for different screen? 【发布时间】:2015-06-23 11:36:09 【问题描述】:

我对 xocde 6 和自动布局非常陌生。我正在为多个设备设计屏幕。我有一些视图,例如图像、文本字段。我为 iPhone 设计了它们。我添加了一些固定高度和宽度约束。所以高度& width remian fix for all devices.I want to change the height & width of view acrding to screen size.我尝试了一种方法

    使宽度等于父视图并给出乘数 0.5。 保持高度固定。 给出纵横比。

这种方式视图是对齐的,但它的高度是固定的。我也使用了前导空格,尾随空格,但这样有时会得到意想不到的结果。那么有没有更好的方法呢?我真的很难弄清楚。

【问题讨论】:

看看自适应布局教程:入门raywenderlich.com/83276/beginning-adaptive-layout-tutorial 【参考方案1】:

如果您是新手,我建议您使用 PureLayout。你可以在你的项目中使用 cocoapods 或 Carthage。使用这个库,您可以超级轻松地为不同的屏幕制作此约束。 github项目中有一个示例项目,您可以在其中找到许多不同的场景。这是项目的github页面:

https://github.com/smileyborg/PureLayout

这是给你的一些示例代码 sn-p @deepak kumar:

- (void)updateViewConstraints

    if (!self.didSetupConstraints) 
        // Apply a fixed height of 50 pt to two views at once, and a fixed height of 70 pt to another two views
        [@[self.redView, self.yellowView] autoSetViewsDimension:ALDimensionHeight toSize:50.0];
        [@[self.blueView, self.greenView] autoSetViewsDimension:ALDimensionHeight toSize:70.0];

        NSArray *views = @[self.redView, self.blueView, self.yellowView, self.greenView];

        // Match the widths of all the views
        [views autoMatchViewsDimension:ALDimensionWidth];

        // Pin the red view 20 pt from the top layout guide of the view controller
        [self.redView autoPinToTopLayoutGuideOfViewController:self withInset:20.0];

        // Loop over the views, attaching the left edge to the previous view's right edge,
        // and the top edge to the previous view's bottom edge
        [[views firstObject] autoPinEdgeToSuperviewEdge:ALEdgeLeft];
        UIView *previousView = nil;
        for (UIView *view in views) 
            if (previousView) 
                [view autoPinEdge:ALEdgeLeft toEdge:ALEdgeRight ofView:previousView];
                [view autoPinEdge:ALEdgeTop toEdge:ALEdgeBottom ofView:previousView];
            
            previousView = view;
        
        [[views lastObject] autoPinEdgeToSuperviewEdge:ALEdgeRight];

        self.didSetupConstraints = YES;
    

    [super updateViewConstraints];

我相信如果你现在就可以开始,你会更容易通过自动布局的头痛。

【讨论】:

【参考方案2】:

我不确定您要问什么,但如果您不希望 Text View 被填充,这听起来像是一个 Auto Layout 问题在整个屏幕上,继续并在 Main.storyboard选择 文本视图,然后点击 >Pin 按钮,如下所示:

请注意,所有约束都已启用,这意味着此文本视图将固定在 ios 屏幕的边缘。

如果您想稍后编辑这些约束,请继续并转到 Size Inspector,您可以直接单击约束:

【讨论】:

嗯,我想问的是如何在 ios 中更改不同屏幕手机的视图宽度和高度。示例我有一个按钮的宽度 = 20 和高度 = 20。它在 4 英寸屏幕上看起来很好,但在 iPad 上这看起来非常小,所以我想以相等的比例更改高度和宽度,这样它看起来就不会奇怪。 @贾斯汀 这就是 Auto Layout 将发挥作用的地方,类似于我们上面所做的,请查看本教程:raywenderlich.com/83129/… 没有什么比支持多设备的了。它们只是一个设备并旋转它。 这就是自动布局的意义所在,它自动根据您运行的设备调整大小。 @deepakkumar 那你做错了。但是正如你上面所说的“我不想编码”,那我们为什么要帮助你呢?

以上是关于如何使用不同屏幕的约束来调整视图的高度和宽度?的主要内容,如果未能解决你的问题,请参考以下文章

iOS 约束。如何通过约束设置图像视图高度比率等于图像比率?

没有为所有屏幕设备正确调整大小的约束

如何使用自动布局来调整表格视图单元格中的视图大小?

为啥 self.view 的高度和宽度与子视图的高度和宽度不同?

如何使用自动布局来调整表格视图单元格中的视图?

如何添加约束以使视图的尺寸在方向改变时不会改变?