iOS开发移动开发技术前沿程序员

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

2016-07-16  本文已影响1072人  DrunkenMouse

通过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的点击事件。详情可查询响应链。

上一篇下一篇

猜你喜欢

热点阅读