使用autolayout计算tableHeaderView高度

时间:2015-01-12 11:00:11

标签: ios objective-c uitableview autolayout tableheader

这是我的xib文件:

enter image description here

正如您所看到的,我有UITableView tableHeaderView(橙色)!在运行时期间显示的所有内容都是正确的,除非标题Label有多个Line,而UILabel得到的内容通常为“..”。我已将numberOfLines更改为0!

我认识到问题是整个表HeaderView的高度!这就是我如何计算代码中的高度:

[self.headerView setNeedsLayout];
[self.headerView layoutIfNeeded];

CGFloat height = [self.headerView systemLayoutSizeFittingSize:UILayoutFittingCompressedSize].height + self.headerView.frame.origin.y;

CGRect headerFrame = self.headerView.frame;
headerFrame.size.height = height;
self.headerView.frame = headerFrame;

[self.tableView setTableHeaderView:self.headerView];

但是在运行时,tableHeaderView太小而无法显示标题Label的2或3或4 ...行。可能是什么问题?

1 个答案:

答案 0 :(得分:1)

我认为您正在努力将内容放入tableview标题中,该标题旨在包含相对较小的静态内容。

假设你想要的是你的桌面视图留在橙色视图的底部,橙色视图用桌面视图滚动(即不是一直停留在屏幕的顶部),我会添加一个滚动条查看橙色视图和tableview的父级,并禁用tableview滚动功能。

然而,这意味着将UITableViewController替换为UIViewController。

例如

-- UIScrollView
  |
  -- UIView (orange view)
  | |
  | -- subview 1
  | -- subview 2
  | -- etc.
  |
  -- UITableView (scrollEnabled = NO)

使用AutoLayout,您可以自动调整橙色视图的大小以适应其内容,这将"推送" UITableView下来。 当用户垂直滑动时,根scrollview将捕获事件,并相应地滚动整个(orangeView + tableView),从而产生与橙色视图是表视图标题相同的效果。