您的位置:首页 > 产品设计 > UI/UE

UITableView中tableHeadView的BUG

2016-06-02 10:00 381 查看
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,他说经验,现在也明白当初他说的,视图布局,没有哪种最好,只有最有效解决办法。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  iOS