具有Autolayout的tableHeaderView无法正常工作

Dav*_*vis 1 objective-c uitableview ios nstableheaderview

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

  • UIImageView在顶部应始终为2:1,所以我设置纵横比和所需约束的其余部分.

  • 4 UIButtons应该始终是水平的,并且应该具有相同的高度和宽度.所以我使用Equal Width和Equal Height,并且纵横比为1:1

  • 和我有两个UILabelsnumberOfLines设置为0.我也把我的子类UILabel,因为preferredMaxLayoutWidth,这样的:

    - (void) layoutSubviews
    {
    [super layoutSubviews];
    
    if ( self.numberOfLines == 0 )
    {
    if ( self.preferredMaxLayoutWidth != self.frame.size.width )
    {
        self.preferredMaxLayoutWidth = self.frame.size.width;
        [self setNeedsUpdateConstraints];
     }
     }
    }
    
    Run Code Online (Sandbox Code Playgroud)

这是我的代码:

- (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];

}
Run Code Online (Sandbox Code Playgroud)

UILabels从我的服务器获取了我的图像和文本,所以我必须等到响应到达,然后我打电话initializeHeaderViewLabels.

**我的问题是tableHeaderView在运行时太大了,所以我的UILabel被拉伸了,并且有很多whiteSpace.也许我想念一些东西?

MAN*_*rii 6

为了使它工作,你需要一些魔法或从表头视图迁移.我已经在这里回答了类似的问题.诀窍是tableHeaderView通过autolayout评估它的高度后神奇地重置.我为此创建了示例项目:TableHeaderView + Autolayout.

  • 首先,令人遗憾的是Apple无法以"正常"方式使用autolayout.第二:谢谢你真的很完美!我会尽快奖励我的赏金! (2认同)