UILabel阻止显示UIButton,直到从调试视图层次结构继续

时间:2017-05-19 11:05:51

标签: ios swift xcode

我有一个包含3个排列子视图的堆栈视图;带有复选框图像的按钮,带有一些文本的标签和带有“i”图像的另一个按钮。创建视图时,由于某种原因没有显示最后一个按钮,所以我进入调试视图层次结构,在那里我可以看到视图列表中的按钮但在实际视图中没有任何地方。当我按下继续停止调试视图层次结构时,按钮会突然显示并挤压标签,使其适合。

如果我删除标签,两个按钮都显示得很好。如果我将视图放在UIView而不是堆栈视图中,则不会显示“i”按钮。如果我缩短标签上的文字,“i”按钮会正确显示。编辑:我也尝试切换标签和'i'按钮,然后两者都正确显示。

Before debugging

After debugging

您是否知道在继续调试可能会更改视图时调用哪些方法?你知道解决这个问题的另一种方法吗?

由于

编辑: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)
])

按钮和标签仅作为已排列的子视图添加,没有添加约束

1 个答案:

答案 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)
        ])

}