根据屏幕高度更改 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 中项目的高度的主要内容,如果未能解决你的问题,请参考以下文章

使用 isHidden 的 UIStackView 动画

更改 .xib 文件中 UIStackView 内的 UILabel 的值

在 Android 中根据屏幕分辨率更改 View 的高度

如何根据内容调整 UIStackView 的大小?

如何根据其内容调整UIStackView的大小?

iOS 9 UIStackView 设置其他 UIStackView 高度 0