大家好我有一个TableHeaderView,一切都由Autolayout管理:
顶部的UIImageView
应始终为2:1,因此我设置了Aspect配额和其余所需的约束。
4 UIButtons
应始终为水平,并且应具有相同的高度和宽度。所以我使用Equal Width和Equal Height,并且纵横比为1:1
我有两个UILabels
且numberOfLines
设为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];
}
}
}
这是我的代码:
- (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在运行时太大了,所以我的UILabel被拉伸了,并且有很多whiteSpace。也许我想念一下?
答案 0 :(得分:6)
为了使其正常工作,您需要一些魔法或从表标题视图迁移。我已经回答了类似的问题here。诀窍是通过autolayout评估它的高度后,神奇地重置tableHeaderView
。我为此创建了示例项目:TableHeaderView+Autolayout。
答案 1 :(得分:1)
尝试以下解决方案
- (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?
答案 2 :(得分:0)
我的问题是我在我的标题视图上设置了约束,这些约束将一些帧值映射到超视图帧值。当我删除约束并直接设置框架时,一切正常。
答案 3 :(得分:-3)
标题视图高度在表视图委托中设置。默认情况下,它与界面构建器中的大小相同,在app中运行时它太大,因为界面构建器的宽度为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;
}
答案 4 :(得分:-6)
blogpost.tags = new_tags