整理一下:tableHeaderView

weixin_34208283發表於2018-03-02
1683453-338d628a28cf4f21
圖片
- (void)viewDidLoad {
    [super viewDidLoad];
    [self.view addSubview:self.tableView];
    [_tableView mas_makeConstraints:^(MASConstraintMaker *make) {
    make.edges.mas_equalTo(UIEdgeInsetsMake(20, 0, 0, 0));
}];

//底部bgView

 self.bgView  = [[UIView  alloc]init];
 self.bgView.backgroundColor = [UIColor greenColor];

//放迴圈滾動檢視
#define HeaderViewHeight 100
self.headerView = [[UIView alloc]initWithFrame:CGRectMake(0, 0, self.view.frame.size.width,   HeaderViewHeight)];
self.headerView.backgroundColor = [UIColor redColor];
[self.bgView addSubview:self.headerView];

//最下面的展示文字
_content = [UILabel new];
_content.numberOfLines = 0;
_content.font = [UIFont systemFontOfSize:15];
self.content.text = @"有這麼一種需求,在列表頂端顯示一些別樣的資料,而這個別樣的資料則  需要通過一個別樣的 View 來展現,它便是 UITableView 的 tableHeaderView。倘若 tableHeaderView 裡的內容很固定,高度不要隨著內容的不同而改變,這樣還好。如果,高度是需要動態改變的,某些人(比如我)可能就會遇到這樣一個難題有這麼一種需求,在列表頂端顯示一些別樣的資料,而這個別樣的資料則需要通過一個別樣的 View 來展現,它便是 UITableView 的 tableHeaderView。倘若 tableHeaderView 裡的內容很固定,高度不要隨著內容的不同而改變,這樣還好。如果,高度是需要動態改變的,某些人(比如我)可能就會遇到這樣一個難題";
[self.bgView addSubview:_content];
//自己封裝的計算文字的size(展示時的字型font要和計算時的font一樣才準確)
CGFloat height = [self getLabelSize:self.content.text withFontSize:[UIFont systemFontOfSize:15] width:self.view.frame.size.width];
_content.frame = CGRectMake(0, HeaderViewHeight, self.view.frame.size.width, height);
CGRect newFrame = self.bgView.frame;
newFrame.size.height = newFrame.size.height+height+HeaderViewHeight;

 self.bgView.frame = newFrame;
 [self.tableView setTableHeaderView:self.bgView];
[self.tableView beginUpdates];
[self.tableView setTableHeaderView:self.bgView];
[self.tableView endUpdates];

}

計算文字高度的方法:

-(CGFloat)getLabelSize:(NSString *)string withFontSize:(UIFont *)font width:(CGFloat)width {
  CGSize textSize = [string boundingRectWithSize:CGSizeMake(width, MAXFLOAT) options:NSStringDrawingUsesLineFragmentOrigin attributes:@{NSFontAttributeName:font} context:nil].size;
  return textSize.height;
}

相關文章