是否可以使用约束将视图高度指定为父视图的百分比,但也可以限制最大结果高度?

Posted

技术标签:

【中文标题】是否可以使用约束将视图高度指定为父视图的百分比,但也可以限制最大结果高度?【英文标题】:Is it possible to use constraints to specify a views height as percentage of the parent view, but also limit the maximum resulting height? 【发布时间】:2019-04-01 09:35:02 【问题描述】:

我是 XCode 的新手,并且已经使用界面构建器设置了一个视图控制器。根是一个堆栈视图,设置为对齐:填充和分布:按比例填充。

堆栈视图中的每个项目都固定到父堆栈视图,并且约束用于使用 Superview.Height 的乘数将高度指定为堆栈视图(即整个屏幕)的百分比。

这部分效果很好,所有视图都缩放到所需的高度百分比,并且在 iPhone 5s 等设备上看起来不错。

但是,在 XS Max 等设备上,某些控件(例如文本字段)看起来太高了,并且内部的文本在上方和下方占据了太多空间(与文本字段矩形相比)。

理想的结果是所有视图都随屏幕缩放,但如果分辨率和纵横比太大,文本字段会保持较小,并将剩余空间留给其他视图。

我的第一个想法是向文本字段添加第二个约束,其中高度设置为小于或等于(例如)30 以及现有的高度百分比。但我已经尝试过了,并尝试了不同的优先级值,但到目前为止没有运气。

是否有任何方法可以在当前(平面)视图层次结构上使用约束和自动布局来实现所需的结果?

或者最好考虑添加嵌套堆栈视图并在嵌套堆栈视图上设置百分比高度约束,同时让里面的文本字段处理自己的高度?

建议赞赏!

【问题讨论】:

使用乘数你可以从这个链接中得到一个想法:-***.com/questions/41216941/… @AnilKumar 谢谢,我目前正在使用乘法器来获得布局分布,并且工作正常。但是,我很好奇是否有办法限制某些视图的结果大小。如“此文本字段的高度应为总高度的 8%,同时保持不大于 30” 好吧,这个文本字段的高度应该是 8%:设置高度等于那个视图然后选择那个约束并将乘数设置为 0.2。总高度,同时保持不大于 30:- 您需要设置约束和关系集大于和常量集 30 Distribution: Fill Proportionally 可能不是你想要的。如果您编辑您的问题并添加您的布局图像,它会更容易为您提供帮助。 @DonMag 这就是问题所在,更改堆栈视图分布使文本字段约束(小于或等于 30)开始工作。谢谢!如果您将其发布为回复,我可以将其标记为正确答案。附:没有布局图像,因为 Mac 没有连接到互联网 ATM,在另一台机器上输入。 【参考方案1】:

Distribution: Fill Proportionally 可能是堆栈视图中最容易被误解的属性,并且可能没有做预期(或想要的)。

根据 OP 的 cmets...更改 Distribution 属性(我假设它已更改为 Fill)解决了这个问题。

【讨论】:

谢谢。是的,我将 Distribution 属性更改为 Fill。

以上是关于是否可以使用约束将视图高度指定为父视图的百分比,但也可以限制最大结果高度?的主要内容,如果未能解决你的问题,请参考以下文章

按视图高度的百分比定义恒定约束

如何使用百分比设置约束?

比例堆栈视图约束引发数十个冲突

如何在XML中为视图指定宽度和高度的百分比?

约束 UICollectionView 高度以匹配内容的高度

滚动视图内的约束布局,总是参考线高度变化