我有一个包含3个排列子视图的堆栈视图;带有复选框图像的按钮,带有一些文本的标签和带有“i”图像的另一个按钮。创建视图时,由于某种原因没有显示最后一个按钮,所以我进入调试视图层次结构,在那里我可以看到视图列表中的按钮但在实际视图中没有任何地方。当我按下继续停止调试视图层次结构时,按钮会突然显示并挤压标签,使其适合。
如果我删除标签,两个按钮都显示得很好。如果我将视图放在UIView而不是堆栈视图中,则不会显示“i”按钮。如果我缩短标签上的文字,“i”按钮会正确显示。编辑:我也尝试切换标签和'i'按钮,然后两者都正确显示。
您是否知道在继续调试可能会更改视图时调用哪些方法?你知道解决这个问题的另一种方法吗?
由于
编辑:Stackviews约束只是一些插入常量的超视图:
NSLayoutConstraint.activate([
stackView.topAnchor.constraint(equalTo: view.topAnchor, constant: 12),
stackView.bottomAnchor.constraint(equalTo: view.bottomAnchor, constant: 12),
stackView.leadingAnchor.constraint(equalTo: view.leadingAnchor, constant: 10),
stackView.trailingAnchor.constraint(equalTo: view.trailingAnchor, constant: 10)
])
按钮和标签仅作为已排列的子视图添加,没有添加约束
答案 0 :(得分:1)
选择StackView转到属性检查器检查Alignment = fill&分布=填充现在选择 StackView 中的标签转到尺寸检查器查找内容拥抱优先级&内容压缩阻力优先级水平优先级小于250因此标签可以轻松拉伸和压回
<强>更新强>
我添加了2个按钮和一个标签,我只是在按钮中使用文字和颜色来模拟你需要的东西。
override func viewDidLoad() {
super.viewDidLoad()
// Do any additional setup after loading the view, typically from a nib.
let label = UILabel()
let checkmarkButton = UIButton()
let infoButton = UIButton()
label.text = "Jeg acceptere vilkår og betinging"
label.setContentHuggingPriority(240.0, for: .horizontal)
label.setContentCompressionResistancePriority(240, for: .horizontal)
label.textAlignment = .center
checkmarkButton.setTitle("Check", for: .normal)
checkmarkButton.backgroundColor = UIColor.blue
infoButton.setTitle("info", for: .normal)
infoButton.backgroundColor = UIColor.gray
view.addSubview(label)
view.addSubview(checkmarkButton)
view.addSubview(infoButton)
let stackView = UIStackView(arrangedSubviews: [checkmarkButton, label, infoButton])
stackView.translatesAutoresizingMaskIntoConstraints = false
stackView.axis = .horizontal
stackView.alignment = .fill
stackView.distribution = .fill
view.addSubview(stackView)
// You have set the trailing constant to 12 which is going outside of the screen if you want to set the trailingAnchor constant programmatically it should be negative
NSLayoutConstraint.activate([
stackView.topAnchor.constraint(equalTo: view.topAnchor, constant: 80),
stackView.trailingAnchor.constraint(equalTo: view.trailingAnchor, constant: -12),
stackView.leadingAnchor.constraint(equalTo: view.leadingAnchor, constant: 12)
])
}