代码之家  ›  专栏  ›  技术社区  ›  MH175

为什么UITableViewCell的layoutSubviews将标签的框架报告为0?

  •  0
  • MH175  · 技术社区  · 5 年前

    我创建了一个非常简单的 UITableViewCell1 只有一个标签,我把标签限制在单元格的 contentView 边界。

    layoutSubviews() 如果我打印标签的框架,它会将标签的框架报告为 (0.0, 0.0, 0.0, 0.0) ,但运行时可以清楚地看到标签的帧不是0。

    我根本误解了什么吗?

    class SimpleTitleLabelCell: UITableViewCell {
    
        lazy private(set) var titleLabel: UILabel = {
            let titleLabel = UILabel()
            self.contentView.addSubview(titleLabel)
            titleLabel.numberOfLines = 0
            titleLabel.text = "Title"
            titleLabel.translatesAutoresizingMaskIntoConstraints = false
            NSLayoutConstraint.activate([
                titleLabel.leadingAnchor.constraint(equalTo: self.contentView.leadingAnchor),
                titleLabel.topAnchor.constraint(equalTo: self.contentView.topAnchor),
                titleLabel.trailingAnchor.constraint(equalTo: self.contentView.trailingAnchor),
                titleLabel.bottomAnchor.constraint(equalTo: self.contentView.bottomAnchor)
            ])
            return titleLabel
        }()
    
       override func layoutSubviews() {
            super.layoutSubviews()
            print("\(self.titleLabel.frame)") 
            //prints (0.0, 0.0, 0.0, 0.0)
        }
    
    }
    

    TableViewController .

    class TableViewController: UITableViewController {
    
        override func viewDidLoad() {
            super.viewDidLoad()
            self.tableView.rowHeight = UITableView.automaticDimension
            self.tableView.estimatedRowHeight = 100
        }
    
         override func numberOfSections(in tableView: UITableView) -> Int {
            return 1
         }
    
         override func tableView(_ tableView: UITableView, 
             numberOfRowsInSection section: Int) -> Int {
             return 1
         }
    
         override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
              return SimpleTitleLabelCell()
          }
    }
    
    0 回复  |  直到 5 年前