【问题标题】:Changing UILabel text & location simultaneously not working同时更改 UILabel 文本和位置不起作用
【发布时间】:2017-09-03 13:16:41
【问题描述】:

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

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

任何帮助将不胜感激!

【问题讨论】:

  • 您的问题缺少上下文。显示更多代码。明确调用此代码的方式和时间。您删除的问题中似乎有更多信息。如果相关,请使用其中一些信息更新此问题。

标签: ios swift multithreading user-interface uilabel


【解决方案1】:
algHeaderLabel.translatesAutoresizingMaskIntoConstraints = true

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

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

无论如何,将我的UILabeltranslates​Autoresizing​Mask​Into​Constraints 设置为true 是解决这个问题的方法。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-08-27
    • 1970-01-01
    • 1970-01-01
    • 2021-10-30
    • 2016-08-25
    相关资源
    最近更新 更多