iOS:更改 StackView 中 TextField 的高度(在 StackView 内)

Posted

技术标签:

【中文标题】iOS:更改 StackView 中 TextField 的高度(在 StackView 内)【英文标题】:iOS: Change height of TextField in StackView (inside StackView) 【发布时间】:2019-04-11 15:03:09 【问题描述】:

我正在使用 Xcode 10/Swift 5/ios 12 并得到了这个布局:

红色(垂直)StackView设置为:

分布:“均等填充” 高度:300(固定) 框架:10 个(每边) 间距:10

5 个水平子 StackViews:

分布:“均等填充” 每个高 52 像素 ((300-40)/5) - 不固定!

蓝色 View 只占用剩余的屏幕空间(顶部与红色 StackView 对齐,底部与“SuperView”对齐)。

标签自动占用 52 像素,但我希望两个 TextField 正好是 30 像素(上方/下方 +11)。如果我只是设置高度,InterfaceBuilder 会抱怨冲突并且实际上并没有改变任何东西。

如何在不改变周围水平 StackView 高度的情况下设置它们的高度?

【问题讨论】:

只需在情节提要中为每个文本字段设置 contentHugging 优先级和 compressionResistance 优先级即可。 @PranavKasetti 抱歉,to required 是什么意思?我知道在哪里设置“优先级”值(在“尺寸检查器”中),但我看不到它们的任何其他设置。 必填表示最大值(1000) @PranavKasetti 我将第一个 TextField 的两个“垂直”优先级都设置为“1000”,但这并没有改变任何东西 - 它仍在抱怨冲突。 尝试将水平堆栈视图的对齐方式设置为fill而不是fillEqually,并改用宽度约束 【参考方案1】:

这是一种解决方案 - 假设您希望堆栈视图中的每一“行”高 52 磅(标签具有绿色背景,只是为了使其框架更易于查看)。

红栈视图:

Alignment: Fill
Distribution: Fill Equally
Spacing: 10

每个水平堆栈视图:

Alignment: Center
Distribution: Fill Equally
Spacing: 0

Red View - 包含 Red Stack ViewBlue View - 在所有四个侧面都被限制在零到 SuperView。

Red Stack View 在 10 点处被限制在其 SuperView(即 Red View)的 Top、Leading 和 Trailing。

唯一的高度约束设置在Date Stack View ... Height = 52。由于Red Stack View 将其分布设置为Fill Equally,剩余的水平堆栈视图将自动获得52 的高度。

并且,通过在每个水平堆栈视图上设置 Alignment: Center,排列的子视图将居中对齐到该 52-pt 高度。

【讨论】:

"Center" 成功了,谢谢!我只是将其余部分保持原样 - 包括 300 的总高度(如果需要,更改它,这样更容易 imo)并为每个标签添加 2 个约束以将顶部和底部与其父 StackView 对齐。 Another question that's related to the layout in my question: Tinting a StackView doesn't work,似乎你只能改变普通视图的背景颜色,标签,......如果我想给我的“Date StackView”一个绿色背景色,我知道我可以将标签和文本字段放在自己的视图中,然后更改它们的颜色。但是有没有更简单的方法? 来自 Apple 文档:"UIStackViewUIView 的非渲染子类;也就是说,它不提供任何自己的用户界面。相反,它只管理位置和其排列视图的大小。” 因此,唯一的方法是将元素嵌入到其他视图中。 抱歉,还有一个问题:如何在标签文本的左侧添加填充但仍在标签内?所以例如绿色标签内有 5pts 的绿色可用空间,然后文本才开始。有没有比在文本中添加空格更好的方法? 您可以使用带有缩进段落样式的属性文本,或者... 将标签嵌入到带有前导约束的UIView 中,或者... 子类UILabel 并覆盖drawTextInRect:,或... 搜索 uilabel insets 会返回各种其他方法。

以上是关于iOS:更改 StackView 中 TextField 的高度(在 StackView 内)的主要内容,如果未能解决你的问题,请参考以下文章

使用swift在scrollview内的stackview中更改uibutton中的标题

QML StackView:动态更改replaceEnter/Exit动画

stackView 的轴更改导致布局错误

如何以编程方式更改 stackView 内单个 UIView 的高度?

StackView 高度 Swift

Stackview 安排问题