UITableViewCell布局和约束何时最终确定?

时间:2019-03-04 16:05:20

标签: ios swift uitableview

我在TableViewCell中有一个标签,我将其设置为文本,在单元格中抛出一个变量(例如myText),如下所示:

class ProjectManagementTableViewCell: UITableViewCell {
    @IBOutlet weak var myLabel: UILabel!

    var myText: String? {
        didSet {
            if let _myText = self.myText {
                self.myLabel.text = _myText
            } else {
                self.myLabel.text = ""
            }
        }
    }

    override func awakeFromNib() {
        super.awakeFromNib()
    }

    override func setSelected(_ selected: Bool, animated: Bool) {
        super.setSelected(selected, animated: animated)

        // Configure the view for the selected state
    }
}

我没有在InterfaceBuilder中固定myLabel宽度大小,因此我希望它会根据从cellForRowAt函数获取的文本进行调整大小。到现在为止一切都很好。但是我希望标签宽度小于某个值,此外,我有一个图像,我希望与标签文本的末尾相距10 pt。因此我需要重新定位UIElement的标签宽度或位置,以响应将文本分配给label的需要。我尝试了几个位置来查找何时可以访问框架位置的新值,但是失败了,例如awakeFromNib和myText的didSet。所以什么时候可以访问UITableViewCell中的帧和约束的最终值?

1 个答案:

答案 0 :(得分:0)

实际上您不需要

var myText: String? {
    didSet {
        if let _myText = self.myText {
            self.myLabel.text = _myText
        } else {
            self.myLabel.text = ""
        }
    }
}

只需在其中分配文本

let cell = //
cell.lbl.text = "text_here"

或在自定义单元类中创建一个configure函数并调用

标签将根据当前约束条件调整大小

还有最后一帧

override func layoutSubviews()
   super.layoutSubviews()
}