有一个调用以下代码的按钮:
algHeaderLabel.frame = CGRect(
x: algHeaderLabel.frame.origin.x,
y: algHeaderLabel.frame.origin.y + 400,
width: algHeaderLabel.frame.size.width,
height: algHeaderLabel.frame.size.height
)
algHeaderLabel.text = "chorus"
当我按下按钮时,文本变为“合唱”,但标签不会改变位置。但是,当我第二次按下按钮时,位置会更新。
我还尝试了一下,发现如果我这样做:
DispatchQueue.main.asyncAfter(deadline: DispatchTime.now() + 3) {
algHeaderLabel.text = "chorus"
}
标签的位置会更新,3秒后文本会更新,但也会将标签返回原来的位置!
非常感谢任何帮助!
答案 0 :(得分:0)
algHeaderLabel.translatesAutoresizingMaskIntoConstraints = true
这似乎可以通过关闭UILabel
或任何UIView
的自动布局来完全解决问题。
根据Apple的translatesAutoresizingMaskIntoConstraints
文档,对于以编程方式创建的任何视图,默认情况下会自动设置为true
,而对于在IB中创建的任何视图,它会自动设置为false
。这让我感到困惑,因为我感觉我以编程方式创建了标签并且它没有约束,所以我最好的猜测是因为UIViewController
UILabel
是在IB中创建的子视图,可能是所有的对于此自动布局属性,视图控制器的子视图默认设置为false
...
在任何情况下,为translatesAutoresizingMaskIntoConstraints
设置true
到UILabel
就可以解决这个问题。