选择 stackView 上的哪个子视图将拉伸(以编程方式)
Posted
技术标签:
【中文标题】选择 stackView 上的哪个子视图将拉伸(以编程方式)【英文标题】:Choose which subview on a stackView will stretch (Programmatically) 【发布时间】:2019-01-21 17:16:33 【问题描述】:我有一个水平堆栈视图的显示,其中子视图由标签和文本字段组成。 stackView 受视图边框的限制
我正在尝试将我的 textField 子视图拉伸到填充堆栈的剩余空间,而标签的堆栈会调整以适应标签大小本身。但相反的情况正在发生。我尝试了很多解决方案,但没有任何帮助。我们以编程方式制作的所有视图和约束。
对于我的堆栈,我正在使用:
func customTextField() -> UIStackView
let stack: UIStackView =
let sv = UIStackView()
sv.axis = .horizontal
sv.isLayoutMarginsRelativeArrangement = true
sv.alignment = .leading
sv.backgroundColor = .red
sv.translatesAutoresizingMaskIntoConstraints = false
return sv
()
let label: UILabel =
let lb = UILabel()
lb.backgroundColor = .red
lb.text = "Label is here"
lb.translatesAutoresizingMaskIntoConstraints = false
return lb
()
let textField: UITextField =
let tf = UITextField()
tf.backgroundColor = .blue
tf.text = "Text Field"
tf.translatesAutoresizingMaskIntoConstraints = false
return tf
()
stack.addArrangedSubview(label)
stack.addArrangedSubview(textField)
return stack
我的 customTextField 的调用者:
let profileUserStack: UIStackView =
let stack = UIStackView()
stack.axis = .vertical
stack.spacing = 8
stack.contentMode = .scaleToFill
stack.translatesAutoresizingMaskIntoConstraints = false
return stack
()
self.addSubview(profileUserStack)
for i in profileTextViews
let view = self.customTextField()
profileUserStack.addArrangedSubview(view)
constraints.append(profileUserStack.buildConstraint(toItem: perfilImageView, constant: 32, type: .top, baseItem: .bottom))
constraints.append(profileUserStack.buildConstraint(toItem: self, constant: 16, type: .leading, baseItem: .leading))
constraints.append(profileUserStack.buildConstraint(toItem: self, constant: -16, type: .trailing, baseItem: .trailing))
activateConstraints(&constraints, to: self)
结果: https://imgur.com/a/ccFZlRM
请注意,这正是我想要实现的目标。但我希望 textField 被拉伸。
【问题讨论】:
【参考方案1】:将contentHuggingPriority
设置为label
,使其始终保持其内容的大小,而textField
占用剩余空间。
label.setContentHuggingPriority(.defaultHigh, for: .horizontal)
【讨论】:
按我的需要工作!谢谢!以上是关于选择 stackView 上的哪个子视图将拉伸(以编程方式)的主要内容,如果未能解决你的问题,请参考以下文章
隐藏stackview中的第一个子视图和其他在iOS 10.2上消失但不是11
在 Swift 中以编程方式将视图添加到 stackview