我正在尝试将按钮宽度设置为等于文本长度。但我的按钮的宽度没有改变。我的按钮位于垂直堆栈视图内。堆栈视图有两个视图。文本是按钮标题标签。我的堆栈放置在超级视图上,该视图与超级视图具有相同的前导和尾随,并垂直和水平居中放置。
@IBOutlet private weak var myButton: UIButton! {
didSet {
myButton.style = .textOnly
myButton.contentHorizontalAlignment = .right
myButton.setAttributedTitle(textlabel, for: .normal)
myButton.frame.size.width = CGFloat(textlabel.length) + 16
}
}
我错过了什么吗?
所有视图(按钮、标签、图像视图等)添加到
UIStackView
作为排列的子视图 自动 将 .translatesAutoresizingMaskIntoConstraints
设置为 false。
所以,这一行:
myButton.frame.size.width = CGFloat(textlabel.length) + 16
什么也不做。
堆栈视图的默认
.alignment
是.fill
,这意味着排列的子视图的宽度将等于堆栈视图的宽度。
如果你不想这样,你需要设置:
stackView.alignment = .center
当然,这意味着您需要对任何不使用其固有内容大小的排列子视图设置宽度约束。