heightForRowAtIndexPath

heightForRowAtIndexPath

UITableViewCell方法中(即给定indexPath),如何获得heightForRowAtIndexPath

(然后,我可以访问我创建的内容 View 以增加其高度)

- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath
{
  // How to get the UITableViewCell associated with this indexPath?
}

谢谢

编辑:实际上真的有一个有效的方法来做到这一点吗?当我放置一些NSLog语句时,似乎在调用heightForRowAtIndexPath之前,它多次调用了cellForRowAtIndexPath(这是我在单元格中设置UILabels的地方)吗?这种含义意味着我可能会尝试使用一种行不通的技术,即我希望通过heightForRowAtIndexPath访问每个单元格中已经创建的标签,以获取它们的高度,并将它们加在一起作为整个单元格行的高度,但是如果它们尚未设置(在cellForRowAtIndexPath内),那么我想我的方法不能真正起作用?

最佳答案

对于 iOS8 :

override func viewDidLoad() {
        super.viewDidLoad()

        self.tableView.estimatedRowHeight = 80
        self.tableView.rowHeight = UITableViewAutomaticDimension
    }

或者
func tableView(tableView: UITableView, heightForRowAtIndexPath indexPath: NSIndexPath) -> CGFloat {
            return UITableViewAutomaticDimension

    }

但是对于 iOS7 ,关键是计算自动布局后的高度,
func calculateHeightForConfiguredSizingCell(cell: GSTableViewCell) -> CGFloat {
        cell.setNeedsLayout()
        cell.layoutIfNeeded()
        let height = cell.contentView.systemLayoutSizeFittingSize(UILayoutFittingExpandedSize).height + 1.0
        return height

    }

注意:

1)如果有多行标签,请不要忘记将numberOfLines设置为0。

2)不要忘记label.preferredMaxLayoutWidth = CGRectGetWidth(tableView.bounds)

关于iphone - 如何在heightForRowAtIndexPath中获取UITableViewCell?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/5254723/

10-09 09:37