静态UITableView,在Swift中创建一个具有动态高度的单元格

时间:2015-10-06 11:57:05

标签: ios swift uitableview

我有一个静态UITableView,有12行,11行我知道高度需要。

我有一个UILabel,其动态文本位于12行内,我如何根据UILabel中的文本创建一个单元格以获得动态高度。

我在viewDidLoad内尝试了以下代码,但它没有用。行保持相同的高度。我还为UILabel

设置了 lines = 0
    tableView.estimatedRowHeight = 100.0
    tableView.rowHeight = UITableViewAutomaticDimension

6 个答案:

答案 0 :(得分:10)

你试过这个吗?

override func tableView(tableView: UITableView, heightForRowAtIndexPath indexPath: NSIndexPath) -> CGFloat {
    if (indexPath.row < 11) {
        // Everything starts at 0, so this covers 0-10
        // Whatever your cell height is
        return <#fixedCellHeight#>
    } else {
        // This is your 12th cell (indexPath.row 11), as we start counting at 0
        return UITableViewAutomaticDimension
    }
}

答案 1 :(得分:2)

添加到@Adrian答案,如果您使用的是静态单元格,将一个单元格更改为动态高度,而将其他单元格改为动态高度,您可以将其编辑为此。

 override func tableView(tableView: UITableView, heightForRowAtIndexPath indexPath: NSIndexPath) -> CGFloat {

        if indexPath.row == 11 {
      // This is your 12th cell (indexPath.row 11), as we start counting at 0
            return UITableViewAutomaticDimension
        } else {
            return super.tableView(tableView, heightForRowAtIndexPath: indexPath)
        }
     }

答案 2 :(得分:1)

试试这个:

func tableView(tableView: UITableView, estimatedHeightForRowAtIndexPath indexPath: NSIndexPath) -> CGFloat {
    return UITableViewAutomaticDimension
}

答案 3 :(得分:0)

您可以为表格视图创建2个单元格原型单元格。你给他们2个不同的身份证。 然后在你的代码中覆盖这个功能

override func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {

    var cell = UITableViewCell()

    if indexPath.row < 12 {
        cell = tableView.dequeueReusableCellWithIdentifier("cell", forIndexPath: indexPath)
    } else {
        cell = tableView.dequeueReusableCellWithIdentifier("cell12", forIndexPath: indexPath)
    }

    return cell
}

答案 4 :(得分:0)

您可以使用文本高度创建动态单元格,然后可以在表格视图中设置静态和动态单元格

以下是带有文本的动态单元格链接如何在UITableView静态单元格中动态更改单元格高度

答案 5 :(得分:0)

更优雅的可能就是按照建议实施:

func tableView(tableView: UITableView, estimatedHeightForRowAtIndexPath indexPath: NSIndexPath) -> CGFloat {
     return UITableViewAutomaticDimension
}

或在目标C中:

- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath {
    return UITableViewAutomaticDimension;
}

但是,不是行特定逻辑,而是在Storyboard中为静态单元格的内容添加约束,以保持行高不变。这样,如果您移动行或更改内容,则无需更改任何代码。