簡體   English   中英

自動布局的tableHeaderView無法正常工作

[英]tableHeaderView with Autolayout not working correctly

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

  • 頂部的UIImageView應該始終為2:1,因此我設置了縱橫比和其余所需的約束。

  • 4個UIButtons應始終為水平,並且高度和寬度應相同。 所以我使用等寬和等高的方法,並且縱橫比為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]; } } } 

這是我的代碼:

- (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圖像和文本,因此必須等到Response到達后,再調用initializeHeaderViewLabels

**我的問題是,在運行時tableHeaderView太大了,因此我的UILabels被拉伸了,並且有很多空白。 也許我想念什么?

為了使它起作用,您需要一些魔術或從表頭視圖遷移出去 我已經在這里回答了類似的問題。 訣竅是通過自動布局評估其高度后,神奇地重置tableHeaderView 我已經為此創建了示例項目: 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;
}

資源:

使用自動布局,IB和字體大小時,表格標題視圖高度錯誤

另請參閱以下問題...!

如何使用自動布局設置tableHeaderView(UITableView)的高度?

我的問題是我在標頭視圖上設置了約束,這些約束將一些框架值映射到超級視圖框架值。 當我刪除約束並直接設置框架時,一切正常。

標題視圖高度是在表視圖委托中設置的。 默認情況下,它與界面構建器中的大小相同,在應用程序中運行時太大,因為界面構建器的寬度為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;
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM