默认UITableViewCell高度对于文本来说很大

时间:2018-01-31 12:52:14

标签: ios swift uitableview

我有一个带有默认单元格的UITableView,我只需添加一个字符串:

func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
    let cell = tableView.dequeueReusableCell(withIdentifier: "Cell")!

    cell.textLabel?.text = tasks[indexPath.row].name
    cell.textLabel?.textColor = .white
    cell.textLabel?.textAlignment = .center

    return cell
}

我的问题是单元格太大而不适合一些普通文本。这是截图,单元格有蓝色背景:

enter image description here

之前我没有这个问题,当我的数据源是String的数组时。我从Strings更改为自定义对象后出现问题。不确定这是否相关。

我该如何解决这个问题?我尝试将行高设置为自定义值,但它没有任何效果。

使用表格视图代码进行编辑:

extension TasksViewController {
    func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
        return tasks.count
    }

    func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
        let cell = tableView.dequeueReusableCell(withIdentifier: "Cell")!

        cell.textLabel?.text = tasks[indexPath.row].name
        cell.textLabel?.textColor = .white
        cell.textLabel?.textAlignment = .center

        return cell
    }

    func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
        dummyTxt.textField.text = tasks[indexPath.row].name
        dummyTxt.becomeFirstResponder()
        dummyTxt.textField.becomeFirstResponder()
    }

    func tableView(_ tableView: UITableView, editActionsForRowAt indexPath: IndexPath) -> [UITableViewRowAction]? {
        let delete = UITableViewRowAction(style: .destructive, title: "Delete") { (_, index) in
            self.tasks.remove(at: index.row)
        }

        return [delete]
    }
}

3 个答案:

答案 0 :(得分:1)

tableView

上设置此项
tableView.estimatedRowHeight = 44
tableView.rowHeight = UITableViewAutomaticDimension

请勿覆盖heightForRowAt委托方法。

然后确保您注册为"Cell"的原型单元格具有适当的约束,可用于计算其高度。在您的情况下,请确保标签的顶部和底部锚点都被约束到单元格的顶部和底部锚点。

答案 1 :(得分:0)

试试这个:

设置行高的自动尺寸&估计行高,确保执行以下步骤,自动尺寸对单元格/行高度布局有效。

  • 分配并实施tableview dataSource和delegate
  • UITableViewAutomaticDimension分配给rowHeight& estimatedRowHeight
  • 实施委托/数据源方法(即heightForRowAt并向其返回值UITableViewAutomaticDimension

-

@IBOutlet weak var table: UITableView!

override func viewDidLoad() {
    super.viewDidLoad()

    // Don't forget to set dataSource and delegate for table
    table.dataSource = self
    table.delegate = self

    // Set automatic dimensions for row height
    table.rowHeight = UITableViewAutomaticDimension
    table.estimatedRowHeight = UITableViewAutomaticDimension
}



// UITableViewAutomaticDimension calculates height of label contents/text
func tableView(_ tableView: UITableView, heightForRowAt indexPath: IndexPath) -> CGFloat {
    return UITableViewAutomaticDimension
}

用于UITableviewCell中的标签实例

  • 设置行数= 0(& line break mode = truncate tail)

答案 2 :(得分:0)

如果每个单元格需要相同的大小,请使用以下委托方法并返回一些整数值。

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

希望它可以帮助你。