UITableViewHeaderFooterView的高度

时间:2015-08-19 23:17:56

标签: ios uitableview

如何计算UITableViewHeaderFooterView-tableview:heightForFooterInSection:的高度?我提前创建了视图,它包含textLabel中的动态文本,因此具有不同的高度。

4 个答案:

答案 0 :(得分:3)

基于我使用以下的其他答案,我对此解决方案并不完全满意,因为它使用了硬编码的填充,并且它不会考虑detailTextLabel,但它可以在我的情况。

- (CGFloat)heightOfHeaderFooterView:(UITableViewHeaderFooterView *)view {
    return ceilf([view.textLabel.text boundingRectWithSize:CGSizeMake(self.tableView.bounds.size.width - 2*self.tableView.separatorInset.left, CGFLOAT_MAX) options:(NSStringDrawingUsesLineFragmentOrigin|NSStringDrawingUsesFontLeading) attributes:@{NSFontAttributeName:view.textLabel.font} context:nil].size.height) + 20;
}

答案 1 :(得分:1)

使用boundingRectWithSize:options:attributes:context:计算textLabel的高度。然后,您将能够获得页脚视图的高度。

如果您更改textLabel的文本,请记住重新加载tableView。

另一种方式:

textLabel.bounds = CGRectMake(0, 0, maxWidth, maxHeight);
[textLabel sizeToFit];

然后你的textLabel的高度是正确的。

答案 2 :(得分:1)

正如@Harrison Xi指出的那样,你可以使用boundingRectWithSize:options:attributes:context:

CGRect headerFrame = [YOUR_STRING boundingRectWithSize:CGSizeMake(240.f, CGFLOAT_MAX) options:(NSStringDrawingUsesLineFragmentOrigin|NSStringDrawingUsesFontLeading) attributes:@{NSFontAttributeName:[UIFont fontWithName:@"" size:15.0f]} context:nil];

CGSize requiredSize = headerFrame.size;

return requiredSize.height;

答案 3 :(得分:0)

这是@ Nick在Swift 3中的答案:

func heightOfHeaderFooterView(view: UITableViewHeaderFooterView) -> CGFloat {
    if let text = view.textLabel?.text as NSString? {
        let size = CGSize(width: tableView.bounds.size.width - 2 * tableView.separatorInset.left, height: CGFloat.greatestFiniteMagnitude)
        let rect = text.boundingRect(with: size, options: [.usesLineFragmentOrigin, .usesFontLeading], attributes: [NSFontAttributeName : (view.textLabel)!.font], context: nil)
        return rect.size.height + 20
    }
    return 0
}