为什么我不能从代码自动调整 UILabel 的文本,但我可以通过 IB?

Why can't I auto-fit text of a UILabel from code, but I can through the IB?

场景: 我只想在每个目标设备的 UILabel 中放置一个字符串。
也就是说,在一个 iPad 模型上,字符串被截断了。另一方面不是。
我怀疑该应用程序与 IB 相比更以代码为中心。
所以我希望能够以编程方式使用 UILabel。

代码如下:

class ViewController: UIViewController {
    @IBOutlet var myLabel: UILabel!

    @IBAction func addMessageAction(_ sender: UIBarButtonItem) {
        let msg = "Mother had a feeling, I might be too appealing. But I can understand."
        myLabel.text = msg
        myLabel.numberOfLines = 0
        myLabel.adjustsFontForContentSizeCategory = true
        myLabel.sizeToFit()

        myLabel.lineBreakMode = .byTruncatingTail
        myLabel.minimumScaleFactor = 0.5
    }

    @IBAction func exitAction(_ sender: UIBarButtonItem) {
        exit(0)
    }
}

这是我按下 'message' 按钮后的屏幕:

这似乎只适用于我在 IB 中设置 UILabel 属性。

为什么它不能通过代码工作?

我试过你的代码,它工作得很好。是否存在任何自动布局约束不匹配?

您可以对此做一件事,更改字体大小以适应标签的宽度

myLabel.adjustsFontSizeToFitWidth = true

Debashish 给了我正确答案。 我添加了他的建议:myLabel.adjustsFontSizeToFitWidth = true 并且它是实时工作的。

有趣的是,我在共享项目中使用了原始代码片段;它奏效了……但在我的小概念验证中却没有。

但同样,添加的 myLabel 属性 语句在这里起到了作用。