Swift 4.2 UITableView Cell不会自动更改其高度

时间:2019-03-03 18:06:09

标签: ios swift uitableview uilabel

我无法自动调整单元格的高度。单元格中有一个UILabel,它具有长文本。但是,它不可见,因为单元格不会自动变大。

import UIKit 
class ViewController: UIViewController {

@IBOutlet weak var tableView: UITableView!

override func viewDidLoad() {
    super.viewDidLoad()
    // Do any additional setup after loading the view, typically from a nib.

    tableView.estimatedRowHeight = 50
    tableView.rowHeight = UITableView.automaticDimension
  }
}

extension ViewController: UITableViewDataSource {
func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
    return 1
}

func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {

    let cell = tableView.dequeueReusableCell(withIdentifier: "Cell", for: indexPath) as! CellTableViewCell

    cell.txt.text = "Lorem ipsum dolor sit amet. Lorem ipsum dolor sit amet. Lorem ipsum dolor sit amet. Lorem ipsum dolor sit amet. Lorem ipsum dolor sit amet. Lorem ipsum dolor sit amet. Lorem ipsum dolor sit amet. Lorem ipsum dolor sit amet. Lorem ipsum dolor sit amet. Lorem ipsum dolor sit amet. Lorem ipsum dolor sit amet. Lorem ipsum dolor sit amet. Lorem ipsum dolor sit amet. Lorem ipsum dolor sit amet. Lorem ipsum dolor sit amet. Lorem ipsum dolor sit amet. Lorem ipsum dolor sit amet. Lorem ipsum dolor sit amet. "

    cell.txt.numberOfLines = 0
    cell.txt.lineBreakMode = .byWordWrapping
    cell.txt.sizeToFit()

    return cell
}

}

结果:

<blockquote class="imgur-embed-pub" lang="en" data-id="a/keAv11b"><a href="//imgur.com/keAv11b"></a></blockquote><script async src="//s.imgur.com/min/embed.js" charset="utf-8"></script>

您能检查一下并告诉我哪里错了吗?

2 个答案:

答案 0 :(得分:1)

根据您的代码,在我看来,您尚未设置tableView的Delegate和DataSource。

tableView.dataSource = self

除此之外,例如,您需要在viewDidLoad的tableView中注册一个自定义单元格,就像这样:

tableView.register(UINib(nibName: "YOUR CELL NAME", bundle: nil), forCellReuseIdentifier: "YOUR CELL REUSE IDENTIFIER")

请告诉我它是否有效。

答案 1 :(得分:1)

首先,您必须设置tableView的Delegate和DataSource:

tableView.dataSource = self
tableView.delegate = self

完成此操作后,请确保如果您将StoryBoard用于AutoLayout。 UITableViewCell中的UILabel必须全部约束到边缘。我的意思是顶部,底部,前导和尾随约束设置为零或标准值。

有时设置tableView.estimatedRowtableView.rowHeight无效,因此最好使用委托函数:

func tableView(_ tableView: UITableView, heightForRowAt indexPath: IndexPath) -> CGFloat {
    return UITableViewAutomaticDimension
}