xcode 对约束上方的UILabel显示隐藏,未按预期对高度约束工作

5rgfhyps  于 2023-03-04  发布在  其他
关注(0)|答案(1)|浏览(123)

我有UILabel,我在tapGesture上显示和隐藏它。我已经通过编程创建了标签,并且只通过编程设置了约束。
默认情况下,在tapGesture方法上使用heightConstraint = 230时UILabel可见我正确地制作了heightConstraint = 0及其隐藏标签。再次在tapGesture上,我需要显示标签,因此当我再次点击时,我可以再次看到heightConstraint = 230,但在UI中看不到标签。
可能的问题是,只有隐藏起作用,显示不起作用。
下面是tapGesture方法的代码,我在其中设置高度约束。

@objc func tapLabel(gesture: UITapGestureRecognizer) {
        print("tap working")
        isExpanded.toggle()
        if(isExpanded){
            NSLayoutConstraint.activate([
                reminderBulletsLbl.heightAnchor.constraint(equalToConstant: 230)
            ])
        }else{
            NSLayoutConstraint.activate([
                reminderBulletsLbl.heightAnchor.constraint(equalToConstant: 0)
            ])
        }
    }

我尝试取消激活约束,但不起作用。
请查看随附的屏幕截图。
1.看到标签时的默认状态

1.单击时,标签隐藏。

现在再次点击后,标签未显示。
先谢了。

tkqqtvp1

tkqqtvp11#

单击时,此行为将添加更多约束

if(isExpanded){
    NSLayoutConstraint.activate([
        reminderBulletsLbl.heightAnchor.constraint(equalToConstant: 230)
    ])
} else {
    NSLayoutConstraint.activate([
       reminderBulletsLbl.heightAnchor.constraint(equalToConstant: 0)
    ])
}

并会造成他们之间的价值观冲突,你需要

var heightCon:NSLayoutConstraint!

viewDidLoad中设置初始状态

heightCon = reminderBulletsLbl.heightAnchor.constraint(equalToConstant: 230)
heightCon.isActive = true

然后在click动作中使用常量属性

heightCon.constant = isExpanded ? 230 : 0
view.layoutIfNeeded()

相关问题