【问题标题】:Swift - UITextView does not display textSwift - UITextView 不显示文本
【发布时间】:2026-01-23 02:55:01
【问题描述】:

我的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 就像在代码中一样,文本将不会显示。

知道为什么会这样吗?

【问题讨论】:

    标签: ios swift uilabel uitextview


    【解决方案1】:

    您的 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 渲染

    【讨论】:

    • 3.为 UITextView 创建约束
    • 我在声明中添加了v.frame = CGRect(x: 0, y: 0, width: 100, height: 30),但它仍然没有显示?我做错了吗?
    • @DieGlueckswurst 检查答案中的Important
    • @DieGlueckswurst 使用“Debug View Hierarchy”按钮检查您的单元格
    • 更新您的问题 1. 来自func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell 的更多代码 2. 您在 InterfaceBuilder 中设置了什么
    【解决方案2】:

    您可以使用 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)
    

    【讨论】: