关闭

UITableView中tableHeadView的BUG

标签: iOS
584人阅读 评论(0) 收藏 举报
分类:


1、BUG出现场景

      描述:这个BUG出现的很奇怪,我的代码风格在UITableView中自定义tableHeadView都是采用XIB,然后通过封装,直接这么调用:

    return [[[NSBundle mainBundle] loadNibNamed:@"TYLocationTableHeadView" owner:nil options:nil] lastObject];

      今天这种做法出现了问题,在XIB画图中,习惯控制死所有视图高度,然后将XIB拉的很长,而视图初始化完毕,直接采用Frame布局:

    UIView *headView = [TYLocationTableHeadView headView];
    containHeadView.backgroundColor = [UIColor redColor];
<pre name="code" class="objc">    headView.frame = cgrectmakexxxxxxx;
 self.tableView.tableHeaderView = containHeadView;



      这种写法,出现了问题,视图的实际尺寸很小,以前没有出现过是因为头部没有交互,而今天headView中有UIButton,造成无法点击,然后通过视图查看,看到视图实际的高度跟代码设置的高度不相等,到此问题算是发现了, 一个自动布局,一个frame布局,二者不等。


2、尝试解决一

      既然二种布局混合了,那改成一种布局不就OK了吗?

      全部采用frame的布局是肯定可以的,但是工作量太大,只有全部autolayout了,但是改完后发现,UITableView的tableHeadView的宽度不是跟tableivew宽度一样,

      这下日了狗了,高度固定,上,左,右间距为0,是一块小视图


3、终极解决

    既然固定frame可以,那我想到,先固定,视图弄出来先,然后出现 了固定大小的视图,接着再自动布局,等于在自定义XIB视图外部包装一层,看代码:

    CGFloat headViewHeight = cacheCitysArray.count == 0 ? (26 + 42) : (26 + 42) * 2;
    UIView *containHeadView = [[UIView alloc] initWithFrame:CGRectMake(0, 0, [UIScreen mainScreen].bounds.size.width, headViewHeight)];
    containHeadView.backgroundColor = [UIColor redColor];
    self.tableView.tableHeaderView = containHeadView;
    TYLocationTableHeadView *headView = [TYLocationTableHeadView headView];
    headView.delegate = self;
    [containHeadView addSubview:headView];
    [headView autoPinEdgesToSuperviewEdgesWithInsets:UIEdgeInsetsZero];


4、最好思考

     以前问过一个老开发人员,什么时候用frame什么时候用autolayout,他说经验,现在也明白当初他说的,视图布局,没有哪种最好,只有最有效解决办法。



1
0

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:108252次
    • 积分:2954
    • 等级:
    • 排名:第12428名
    • 原创:173篇
    • 转载:142篇
    • 译文:0篇
    • 评论:0条
    文章分类