我在界面构建器中设置了一个XIB,我正在尝试将此xib用作我的tableview标头。此XIB具有图像视图,此图像上方是一些标签。 Imageview固定在各方面。在将此XIB设置为tableview标头之前,我将viewDidLoad中的帧设置为:
self.viewTableHeader.frame = CGRectMake(0, 0, CGRectGetWidth([UIScreen mainScreen].bounds), TABLE_HEADER_HEIGHT);
[self.tableView setTableHeaderView:self.viewTableHeader];
tableview标题位于两个黑色边框之间。蓝色背景是imageview的背景。因此,tableviewheader没有获得imageView的正确高度。经过一些教程后,我在viewDidLayoutSubviews
中找到了以下方法 -(void)updateTableHeaderFrame{
UIView *headerView = self.tableView.tableHeaderView;
[headerView setNeedsLayout];
[headerView layoutIfNeeded];
if (headerView) {
CGFloat height = [headerView systemLayoutSizeFittingSize:UILayoutFittingCompressedSize].height;
CGRect headerFrame = headerView.frame;
if (height!=headerFrame.size.height) {
headerFrame.size.height = height;
headerView.frame = headerFrame;
self.tableView.tableHeaderView = headerView;
}
}
}
它解决了我的问题。
但是我必须为我的所有iphone使用3x图像。当这个'CGFloat height = [headerView systemLayoutSizeFittingSize:UILayoutFittingCompressedSize] .height;得到图像的实际高度,即3 * 193 = 579。结果tableview标题的高度变为579。 请帮忙!
答案 0 :(得分:0)
为什么不使用viewForHeaderInSection?
- (UIView *)tableView:(UITableView *)tableView viewForHeaderInSection:(NSInteger)section
{
UIImage *myImage = [UIImage imageNamed:@"loginHeader.png"];
UIImageView *imageView = [[UIImageView alloc] initWithImage:myImage] ;
imageView.frame = CGRectMake(10,10,300,100);
return imageView;
}
- (CGFloat)tableView:(UITableView *)tableView heightForHeaderInSection:(NSInteger)section
{
return 100;
}