根据屏幕高度更改 UIStackView 中项目的高度
Posted
技术标签:
【中文标题】根据屏幕高度更改 UIStackView 中项目的高度【英文标题】:Changing the height of items in UIStackView based on Screen height 【发布时间】:2017-10-06 20:11:30 【问题描述】:我在最新的Xcode中使用UIStackViews,布局如下:
文字标签 选择器(1 个组件) 文字标签 选择器(1 个组件) 文字标签 选择器(4 个组件) 分段控制(3 段)
我有以下 UI 约束:
StackViewTop = SafeAreaTop + 8 StackViewLeading = SafeAreaLeading + 8 StackViewTrailing = SafeAreaTrailing - 8 Picker_1 = 96 像素 Picker_2 = Picker_1 高度 Picker_3 = Picker_2 高度
使用组件的固有尺寸(除了我设置为 96 像素的 3 个选择器),一切都适合 iPhone SE(568 像素),但是选择器相当短。在任何其他设备上,都有更多的垂直空间可以让拾取器更高。
当有可用的垂直空间时,我想让三个选择器将它们的高度增加到它们的固有高度;我无法在 Interface Builder 中找到正确的设置组合来完成这项工作。有没有办法做到这一点?
这个问题的第二部分是,如果屏幕足够宽,我希望堆栈视图的宽度受到限制(可能为 512)并居中。
【问题讨论】:
到目前为止你尝试过什么?您尝试了哪些限制条件,为什么它们不起作用? 【参考方案1】:当谈到你问题的第一部分时。
这就是你应该如何配置你的堆栈视图。除了您所做的之外,我还会添加一个大于或等于号的底部约束。它不会让堆栈视图越界。
更新
看了你的layout后,我稍微改变了解决方案。
选择器的高度相等的配置方式与您相同。 顶部选择器的高度限制大于或等于 96。如果空间足够,它将让自动布局引擎增加其大小。 所有标签和段控件都有垂直内容 抗压优先级设置为 1000(必需)。 顶部拾取器具有垂直内容压缩阻力 优先级设置为 250(低)。你可以在这个GitHub repository中找到我的实现。 结果如下。
【讨论】:
Kamil,感谢您的意见,我一直在玩 Compression Resistance。您建议的设置仍然不希望我期待。如果这很重要,我正在运行 Xcode 9.1 Beta。 选择器并没有变得更高。 这就是我得到的!ScreenShot David,我几乎复制了您在辅助项目中的布局,在 Xcode 9(稳定版)中,它看起来像 screenshot。我已将其推送至GitHub,请随时查看。 谢谢,我发现了我的问题。我隐藏了主 StackView 的一部分,并且有一个约束将大小拉到 0。以上是关于根据屏幕高度更改 UIStackView 中项目的高度的主要内容,如果未能解决你的问题,请参考以下文章