如何在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的 位置和大小。


  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值