自动布局比例缩放视图

18

我已经找到了一些关于这个主题的问题和答案,但是我只是无法使其对我起作用。

缩放

蓝色矩形是一个包含测试标签和齿轮图像按钮的UIView。红色的则是第二个UIView。

我想要做的是,当屏幕越来越大时,让蓝色条(即UIView)增大,这将导致标签和设置按钮的比例缩放,而红色UIView会缩小高度,以便蓝色UIView可以变得更大。所以基本上问题是,如何在不同的屏幕尺寸中等比例缩放UIViews。

我尝试使用纵横比约束、高度约束(大于/小于),但是我就是不能得到期望的效果。

谢谢。

2个回答

26
尝试比例高度和宽度。您需要为等高度和/或等宽度设置约束,然后双击约束并更改乘数,例如0.2,如果您希望第一个项目在宽度上占第二个项目的20%,则为2.0,宽度增加或减少根据您的要求成比例地“输入图像描述”

3
谢谢。这个效果相当不错。现在我卡在了标签缩放和字体上。这真是一个噩梦… - Ertay Shashko
1
对于缩放标签和字体,请检查我的答案,您应该使用 size-classes:通过此功能,您还可以为一个 size-class 设置字体大小。例如,我正在更新我的答案。 - Massimo Polimeni
1
通常情况下,您会为标签使用固定字体大小,并且不会给它们设置高度和宽度,而是设置它们的尾随、前导、顶部和底部约束。但是,如果您希望在视图被压缩时字体大小会自动缩小,则可以将“最小字体比例”或“最小字体大小”设置为自动缩小值。是的,您可以像Massimo建议的那样使用大小类 :) 但是,大小类可能不被IOS 7完全支持。但是,您可以为不同的大小类(即iPhone纵向、iPhone横向、iPad纵向和iPad横向)设置字体,以适应所有类型的分辨率。 - Asadullah Ali
@AsadullahAli 我正在使用Visual Studio制作故事板,但无法设置小于零的乘数。还有其他方法可以做到吗? - Basit ZIa
@BasitZIa 抱歉,我不确定在Visual Studio上的故事板。但是您可以在文本编辑器中打开故事板文件,通过ID查找约束并更改其值。 - Asadullah Ali
@BasitZIa - 你在尝试做什么?唯一有意义的乘数是正数:小于1(例如0.5)会使第一个项目比第二个项目更小;大于1会使第一个项目更大。如果乘数没有达到您的预期,您是否尝试交换第一个和第二个项目(下拉菜单中有“交换…”选项)?或者如果“没有发生任何事情”,那么它无法计算出解决方案-需要添加其他约束条件或存在冲突的约束条件。 - ToolmakerSteve

9
你有两种方法可以实现这个:

1. 比例约束:

但是,如果你为一个视图设置了比例高度,这意味着视图会随着屏幕尺寸的每一点变化而改变。例如,从4英寸到4.7英寸,你的视图可能会稍微变大,但这并不意味着这是一个坏主意。

要使用此功能,只需查看Asadullah Ali的答案 :)

2. 使用大小类:

如果你正在使用Xcode 6,你可以使用大小类,并为屏幕大小添加约束;使用起来并不困难,请查看Apple文档

对于此功能,你需要启用Storyboard的大小类:

enter image description here

之后,您可以按照自己的意愿设置视图控制器,并仅为其中一个类添加规则:

enter image description here

你可以告诉Xcode:“好的,如果屏幕大小至少为5.5,则使用此规则。”请记住,要为特定的尺寸类别添加约束,您需要先选择尺寸类别,然后正常添加约束:当选择尺寸类别时(您可以在尺寸类别控件中检查),Xcode仅为该类别添加约束。编辑1:如果您在缩放字体等方面遇到问题,您还可以使用尺寸类别功能来缩放标签中的字体大小,例如;激活尺寸类别功能后,单击此选项即可找到此选项:

How add a font size for one size class


我希望告诉你我所知道的关于你的问题,但就你个人而言,我会使用第一种解决方案:你的视图可以根据屏幕大小动态更改。
你只需要找到最佳比例百分比:你可以设置大约10%,因此第一个项目使用0.1倍数乘以蓝色视图,第二个项目使用红色视图。

问题是关于缩放视图的。调整字体大小应该在另一篇帖子中进行讨论。 - MLBDG
4
你读完整个回答了吗?更改字体大小只是最后一个要点。 - Massimo Polimeni

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接