Swift - UITextView 不显示文本

Swift - UITextView does not display text

我的 UITextView 没有显示它的 text,我不知道为什么。

let linkLabel: UITextView = {
    let v = UITextView()
    v.backgroundColor = .clear
    v.text = "Link"
    v.textColor = .lightGray
    v.font = UIFont(name: "AvenirNext", size: 18)
    v.font = v.font?.withSize(18)
    v.textAlignment = .right
    v.translatesAutoresizingMaskIntoConstraints = false
    return v
}()

之前是 UILabel 并且运行良好。但我需要它是 UITextView。但是,如果我像代码中那样将其更改为 UITextView,则文本不会显示。

知道为什么会这样吗?

您的 UITextView 框架等于 CGRect.zero 并且与 UILabel 不同,UITextView 没有 intrinsic 框架。这就是你看不到它的原因。


解决方案

  1. 使用 init(frame: CGRect)

UITextView(frame: CGRect(x: 0, y: 0, width: 100, height: 30))
  1. 稍后设置帧属性

let v = UITextView()
v.frame = CGRect(x: 0, y: 0, width: 100, height: 30)

重要:

必须通过 InterfaceBuilder 或使用 UIView 对象的方法 view.addSubview 在代码中将 linkLabel 添加到视图中

override func viewDidLoad() {
    super.viewDidLoad()
    view.addSubview(linkLabel)
}

调试技巧:

  • 调试视图层次结构

单击调试区域顶部栏中的 Debug View Hierarchy 按钮以检查暂停应用的视图层次结构的 3D 渲染

您可以将 sizeToFit() 和 isScrollEnabled 设置为 false,如下所示:

let linkLabel: UITextView = {
        let v = UITextView()
        v.backgroundColor = .red
        v.text = "Link"
        v.textColor = .lightGray
        v.font = UIFont(name: "AvenirNext", size: 18)
        v.font = v.font?.withSize(18)
        v.textAlignment = .right
        v.sizeToFit()
        v.isScrollEnabled = false
        v.translatesAutoresizingMaskIntoConstraints = false
        return v
    }()
// And set the frame whereever you want 
linkLabel.frame.origin = CGPoint(x: 100, y: 100)
self.view.addSubview(linkLabel)