带自动布局的 tableHeaderView 无法正常工作

tableHeaderView with Autolayout not working correctly

大家好,我有一个 TableHeaderView,一切都由 Autolayout 管理:

这是我的代码:

- (void)initializeHeaderViewLabels
{
 //After the Response from my server arrived i set the tableHeaderView with the Textdata
self.tableView.tableHeaderView = nil;

if((self.contentDict[@"title"]) != [NSNull null])
{
    self.headerTitleLabel.text = (self.contentDict[@"title"]);
}

if((self.contentDict[@"shortDescription"]) != [NSNull null])
{
    self.headerDescriptionLabel.text = (self.contentDict[@"shortDescription"]);
}

[self.headerView setNeedsLayout];
[self.headerView layoutIfNeeded];

CGFloat height = [self.headerView systemLayoutSizeFittingSize:UILayoutFittingCompressedSize].height;

CGRect headerFrame = self.headerView.frame;
headerFrame.size.height = height;
self.headerView.frame = headerFrame;

[self.tableView setTableHeaderView:self.headerView];

}

我从我的服务器获取我的图像和 UILabels 的文本,所以我必须等到响应到达,然后我调用 initializeHeaderViewLabels

**我的问题是 tableHeaderView 在运行时太大了,所以我的 UILabels 被拉长了,有很多空白。也许我错过了什么?

页眉视图高度在 table 视图委托中设置。默认情况下,它与界面生成器中的大小相同,但在应用程序中 运行 时太大,因为界面生成器的宽度为 600。

所以你需要的是在UITableViewDelegate

中实现这个方法
func tableView(tableView: UITableView, heightForHeaderInSection section: Int) -> CGFloat {
    return 200.0 // Set the desired height based on your device or what ever you are using.
}

和Objective-C版本:

- (CGFloat)tableView:(UITableView *)tableView heightForHeaderInSection:(NSInteger)section {
    return 200.0f;
}
- (CGFloat)tableView:(UITableView *)tableView heightForHeaderInSection:(NSInteger)section 
{
    return 200;
}

为了使其正常工作,您需要一些 魔法或从 table header 视图 迁移。我已经回答过类似的问题 here. The trick is to magically reset tableHeaderView after evaluating it's height via autolayout. I've created sample project for that: TableHeaderView+Autolayout.

尝试以下解决方案

- (void)sizeHeaderToFit
{
    UIView *header = self.tableView.tableHeaderView;

    [header setNeedsLayout];
    [header layoutIfNeeded];

    CGFloat height = [header systemLayoutSizeFittingSize:UILayoutFittingCompressedSize].height;
    CGRect frame = header.frame;

    frame.size.height = height;
    header.frame = frame;

    self.tableView.tableHeaderView = header;
}

来源:

table header view height is wrong when using auto layout, IB, and font sizes

也参考下面的问题...!

How do I set the height of tableHeaderView (UITableView) with autolayout?

我的问题是我在我的 header 视图上设置了约束,这些视图将一些帧值映射到超级视图帧值。当我删除约束并直接设置框架时,一切正常。