美文网首页iOS开发移动开发技术前沿程序员
iOS 你用了这么久的tableView,你有遇到过这些问题吗

iOS 你用了这么久的tableView,你有遇到过这些问题吗

作者: DrunkenMouse | 来源:发表于2016-07-16 10:54 被阅读1072次

    通过tableView的代理方法设置组头View,却不设置组头的高度,会出现什么情况?

    有时候不会调用tableView的代理方法,且tableView的高度要大于组头的高度,否则会发现返回行,返回Cell等代理方法依旧不执行。

    设置了sectionHeaderHeight,又通过tableView的代理方法返回了一个带有高度的组头View,组头View的高度是否改变?

    若设置了sectionView的sectionHeaderHeight则组头的高度不会因为view的高度而改变。所以若添加按钮或手势在View上,即使有时能响应,但超过组头的部位却会出现点击事件无法响应等问题,详情可查询响应链。

    若在自定义方法中调用了tableView的reload方法,则此时是去刷新tableView还是等到自定义方法运行结束再去刷新?

    对于tableView的reload方法,不会立刻调用,而是等到所在方法结束后才去刷新tableVIew。

    若一个界面即含有tableView又包含collectionView时,则滚动时会出现什么情况?

    当一个页面即含有tableView又包含collectionView时,滚动结束时调用的方法可能会都调用同一个方法:scrollViewDidEndDecelerating:(UIScrollView *)scrollView,所以要在方法内部需要对scrollView进行判断,判断一下当前scrollView属于哪个类的[[scrollView isKindOfClass:[UICollectionView class]]进而做出不一样的处理,以免出现BUG。

    如何快速获取tableView或CollectionView的所有Cell?

    通过[self visibleCells]可获得tableView或collectionView的所有cell。

    tableView有时候会出现最后一行的Cell过高,为什么?

    关于tableView有时候会出现最后一行Cell过高,是由于tableView的高度设置问题。

    UITableViewCell的cell行高自动计算,为什么有时候会失效?

    UITableViewCell的cell行高自动计算,需要把视图添加到ContentView里,否则有时候会出现Cell高度为默认高度而不是Cell的高度随着内容的添加而改变。

    如何让tableView不显示没内容的cell?

    tableView不显示没内容的cell可通过self.tableView.tableFooterView = [[UIView alloc]init];

    数据量大时用PickerView还是tableView,为什么?

    pickerView数据量大时不好查找,因为需要一个一个翻 ,而tableView则有个索引。

    重用时cell上的contentView的内容会不会清空?

    不会。所以会出现数据重叠现象,我的解决方案有如下几点:

    1. 创建完cell后在创建一个与cell同等大小的view覆盖住(但是原数据还在,占内存。且瀑布流时会发现数据显示错误)。

    2. 删除cell的contentView的所有子视图:

    while ([cell.contentView.subviews lastObject] != nil)

    {

      [(UIView*)[cell.contentView.subviews lastObject] removeFromSuperview];

    }(保证了数据全部清空)

    3. 通过自定义Cell,然后通过重写LayoutSubviews使得cell的frame被修改时,控件的frame也跟着改变,赋值时则对同一个对象赋值。此时只要将数据传给cell,让其自己处理即可。

    有人说可以用prepareForReuse,但我试了之后发现没有成功。查了下资料说是需要重写此方法,然而此方法又是需要继承cell之后才能重写,所以不自定义cell的时候我就直接用的while循环清空视图。

    若cell被同等大小的按钮覆盖住会怎样?被View覆盖住那?

    被按钮覆盖住则cell的点击事件被拦截,被View覆盖住则不会。除非你给View添加一个手势监听,此时可通过按钮的点击事件来代替cell的点击事件。详情可查询响应链。

    相关文章

      网友评论

      本文标题:iOS 你用了这么久的tableView,你有遇到过这些问题吗

      本文链接:https://www.haomeiwen.com/subject/brcujttx.html