选择 stackView 上的哪个子视图将拉伸(以编程方式)
Choose which subview on a stackView will stretch (Programmatically)
我有一个水平堆栈视图的显示,其中子视图由标签和文本字段组成。 stackView 受限于视图的边界
我正在尝试拉伸我的 textField 子视图,使其填充剩余的 space 堆栈,同时调整标签的堆栈以适应标签本身的大小。但相反的情况正在发生。我尝试了很多解决方案,但没有任何帮助。我们以编程方式进行的所有视图和约束。
对于我的堆栈,我使用的是:
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
}
我的自定义文本字段的调用者:
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 被拉伸。
将 contentHuggingPriority
设置为您的 label
,使其始终保持其内容的大小,textField
占用剩余的 space。
label.setContentHuggingPriority(.defaultHigh, for: .horizontal)
我有一个水平堆栈视图的显示,其中子视图由标签和文本字段组成。 stackView 受限于视图的边界
我正在尝试拉伸我的 textField 子视图,使其填充剩余的 space 堆栈,同时调整标签的堆栈以适应标签本身的大小。但相反的情况正在发生。我尝试了很多解决方案,但没有任何帮助。我们以编程方式进行的所有视图和约束。
对于我的堆栈,我使用的是:
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
}
我的自定义文本字段的调用者:
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 被拉伸。
将 contentHuggingPriority
设置为您的 label
,使其始终保持其内容的大小,textField
占用剩余的 space。
label.setContentHuggingPriority(.defaultHigh, for: .horizontal)