改变UILabel文本&位置同时不起作用

时间:2017-04-08 04:37:30

标签: ios swift multithreading user-interface uilabel

有一个调用以下代码的按钮:

  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秒后文本会更新,但也会将标签返回原来的位置!

非常感谢任何帮助!

1 个答案:

答案 0 :(得分:0)

algHeaderLabel.translatesAutoresizingMaskIntoConstraints = true

这似乎可以通过关闭UILabel或任何UIView的自动布局来完全解决问题。

根据Apple的translates​Autoresizing​Mask​Into​Constraints文档,对于以编程方式创建的任何视图,默认情况下会自动设置为true,而对于在IB中创建的任何视图,它会自动设置为false。这让我感到困惑,因为我感觉我以编程方式创建了标签并且它没有约束,所以我最好的猜测是因为UIViewController UILabel是在IB中创建的子视图,可能是所有的对于此自动布局属性,视图控制器的子视图默认设置为false ...

在任何情况下,为translates​Autoresizing​Mask​Into​Constraints设置trueUILabel就可以解决这个问题。