【发布时间】:2026-01-11 20:25:02
【问题描述】:
我有一个以编程方式创建的 UILabel,并希望在创建后动态设置 text 属性。我可以在初始化期间自动换行,但随后不能。更改标题标签文本后,无论我将行数设置为 2 还是 0 以及是否自动换行,它都会保留一行。更改标题后,我希望它占据 2 行,并且文本很容易发生这种情况,但事实并非如此。
let titleLabel: UILabel = {
let label = UILabel()
label.textAlignment = .center
label.translatesAutoresizingMaskIntoConstraints = false
label.backgroundColor = .clear
label.layer.masksToBounds = true
label.numberOfLines = 0
label.lineBreakMode = NSLineBreakMode.byWordWrapping
label.textColor = .white
return label
}()
var titleLabelText: String? {
didSet {
titleLabel.text = titleLabelText
titleLabel.layoutIfNeeded()
}
}
然后……
override func viewWillAppear(_ animated: Bool) {
super.viewWillAppear(animated)
titleLabelText = "some string which needs word wrapping"
}
titleLabel.heightAnchor.constraint(equalToConstant: 40.0).isActive = true
titleLabel.widthAnchor.constraint(equalToConstant: screenWidth - 90).isActive = true
字体大小为UIFont(name: "Muli", size: 12)
这是我在viewDidLoad() 中加载标签的方式,但 label.text 应用于viewDidAppear()
let headerStackView: UIStackView = {
let headerArray = [welcomeLabel]
let stackView = UIStackView(arrangedSubviews: headerArray)
【问题讨论】:
-
translatesAutoresizingMaskIntoConstraints 如果您不使用自动布局约束,则应为 true,如果是,请尝试更新 didSet 中的约束,即 view.setNeedsUpdateConstraints()
-
label.translatesAutoresizingMaskIntoConstraints = false是必需的,因为我在没有故事板的情况下使用代码进行所有操作。您的建议导致我的锚点无效和空白视图。 -
你能解释一下你是如何在视图中添加标签的吗,在上面的代码中,不清楚你是创建约束还是以编程方式添加框架
-
如果以编程方式添加约束,请在 viewDidLayoutSubViews() 或 viewDidAppear() 中设置 titleLabelText
-
我不使用框架,didSet 是类级别的。