Swift 5 : 根据 titleLabel 长度调整按钮大小
Swift 5 : Resizing a button according to titleLabel length with padding
我有一个水平 UIStackView
,其中包含一个 UILabel
和一个 UIButton
。
我的 UILabel
正确地适合并包裹在 UIStackView
的中间,但问题是我的 UIButton
的中间内容被截断或没有填充。
我做的是:
let container = UIStackView()
self.addSubview(container)
container.addArrangedSubview(debateName)
container.addArrangedSubview(debateButton)
container.axis = .horizontal
container.distribution = .equalSpacing
container.alignment = .center
container.spacing = 15
container.isLayoutMarginsRelativeArrangement = true
container.layoutMargins = UIEdgeInsets(top: 0, left: 15, bottom: 0, right: 15)
container.isUserInteractionEnabled = true
container.addBorder(hexString: SettingsProvider.sharedInstance.borderBoxColor, width: 0.2)
container.snp.makeConstraints { (make) -> Void in
make.top.equalTo(self)
make.left.equalTo(self)
make.right.equalTo(self)
make.height.greaterThanOrEqualTo(100)
}
myLabel.numberOfLines = 0
myButton.setTitle(NSLocalizedString(self.textKey, comment: ""), for: .normal)
myButton.uppercased()
myButton.layer.cornerRadius = 6
myButton.contentEdgeInsets = UIEdgeInsets(top: 8, left: 10, bottom: 8, right: 10)
myButton.sizeToFit()
myButton.addBorder(hexString: SettingsProvider.sharedInstance.borderBoxColor, width: 0.2)
myButton.addShadow(offset: CGSize.init(width: 0, height: 1), color: UIColor.init(hexString: SettingsProvider.sharedInstance.borderBoxColor), radius: 4, opacity: 0.35)
我唯一能做的就是删除 contentEdgeInsets()
这样我的内容就不会被截断但是我丢失了我的填充 :
有什么方法可以结合这两个要求吗?
两件事...
- 在您的堆栈视图中,设置
.distribution = .fill
而不是 .equalSpacing
。你只有两个排列好的子视图(只有一个space)
- 你不需要
myButton.sizeToFit()
将此行添加到您的按钮设置中:
myButton.setContentCompressionResistancePriority(.required, for: .horizontal)
这应该可以防止您的按钮压缩/截断其标签。
我有一个水平 UIStackView
,其中包含一个 UILabel
和一个 UIButton
。
我的 UILabel
正确地适合并包裹在 UIStackView
的中间,但问题是我的 UIButton
的中间内容被截断或没有填充。
我做的是:
let container = UIStackView()
self.addSubview(container)
container.addArrangedSubview(debateName)
container.addArrangedSubview(debateButton)
container.axis = .horizontal
container.distribution = .equalSpacing
container.alignment = .center
container.spacing = 15
container.isLayoutMarginsRelativeArrangement = true
container.layoutMargins = UIEdgeInsets(top: 0, left: 15, bottom: 0, right: 15)
container.isUserInteractionEnabled = true
container.addBorder(hexString: SettingsProvider.sharedInstance.borderBoxColor, width: 0.2)
container.snp.makeConstraints { (make) -> Void in
make.top.equalTo(self)
make.left.equalTo(self)
make.right.equalTo(self)
make.height.greaterThanOrEqualTo(100)
}
myLabel.numberOfLines = 0
myButton.setTitle(NSLocalizedString(self.textKey, comment: ""), for: .normal)
myButton.uppercased()
myButton.layer.cornerRadius = 6
myButton.contentEdgeInsets = UIEdgeInsets(top: 8, left: 10, bottom: 8, right: 10)
myButton.sizeToFit()
myButton.addBorder(hexString: SettingsProvider.sharedInstance.borderBoxColor, width: 0.2)
myButton.addShadow(offset: CGSize.init(width: 0, height: 1), color: UIColor.init(hexString: SettingsProvider.sharedInstance.borderBoxColor), radius: 4, opacity: 0.35)
我唯一能做的就是删除 contentEdgeInsets()
这样我的内容就不会被截断但是我丢失了我的填充 :
有什么方法可以结合这两个要求吗?
两件事...
- 在您的堆栈视图中,设置
.distribution = .fill
而不是.equalSpacing
。你只有两个排列好的子视图(只有一个space) - 你不需要
myButton.sizeToFit()
将此行添加到您的按钮设置中:
myButton.setContentCompressionResistancePriority(.required, for: .horizontal)
这应该可以防止您的按钮压缩/截断其标签。