如何在Autolayout的模式下动态设置 UITableView的 tableHeader 的高度

 最近遇到一个 问题,就是使用单独的一个 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的 位置和大小。


你可能感兴趣的:(iphone/object-c)