最近遇到一个 问题,就是使用单独的一个 xib文件 autolayout来创建一个 UITableView的 tableHeader. 这个 xib是一个动态高度的View。
所以就有个问题,用xib 创建完的 View是 固定高度的,如果直接用 :
m_contentTableView.tableHeaderView= headerView;
这样类似的语句去设置 headerView,那么这个headerView 总会是固定的高度,如果内容过多会显示不完整,如果内容过少,那么就会留下一段空白。
尝试了headView内部用一个变量m_bNeedHeight来记录 headerView的内部实际需要的高度,然后在每次这个
m_bNeedHeight的时候,在外面修改 headerView的 Frame ,代码如下:
-(void) onNeedsHeightChanged:(CGFloat) nNeedsHeight
{
CircleDetailsHeaderView * headerView = [self getHeaderView];
if (headerView)
{
CGRect frame = headerView.frame;
frame.size.height = nNeedsHeight;
headerView.frame = frame;
}
}
这样就好了吧,哈哈,run一下,发现然并卵,这并没有什么鸟用。
问题在哪呢?
发现下面的才是终极解决问题的代码:
-(void) onNeedsHeightChanged:(CGFloat) nNeedsHeight
{
CircleDetailsHeaderView * headerView = [self getHeaderView];
if (headerView)
{
CGRect frame = headerView.frame;
frame.size.height = nNeedsHeight;
headerView.frame = frame;
m_contentTableView.tableHeaderView = headerView;
}
}
那就是不但要重新设置frame,而且需要重新赋值给 tableView,这样tableView才会重新去layout 这个外面赋值过去的headerView的 位置和大小。