使用TableView遇到的问题
场景1:
我的TableView的Cell有三种样式,但是我只创建一种cell想实现三种cell的样式,就会遇到问题。
比如cell中有3个imageView 我全部都显示出来, 但是由于重用池机制会当这个cell消失其他cell再出现的时候 我只想显示1张图片 其他两个imageView没有赋值,但是仍然显示3个图片。
这个问题就是因为重用池的原因,重写
- (void)prepareForReuse
{
[super prepareForReuse];
}
方法可解决这个问题
场景2:
未知原因不创建tableView的Cell, 有以下几种可能,
1、没签协议
2、没设置代理
3、cell的高度是0 也会不走
4、数据没有刷新
场景3:
tableView的section的header无法返回自定义view
如果想返回自定义view需要和cell一样注册一个重用池
场景4:
tableView的样式显示不正确。
需要在layoutSubView方法中设置tableView中的各种样式,
如果写在这里仍然不对一定是没写[super layoutSubViews]方法
场景5:
想更改系统的tableVIewCell的各种控件位置什么的,需要重写tableViewCell的类;
场景6: Tableview的Cell在ios7系统下不能置顶,空出几行
解决办法在viewdidload里面加入self.automaticallyAdjustsScrollViewInsets = NO
如果没有设置self.automaticallyAdjustsScrollViewInsets = NO,那么iOS7下会自动让scrollView滑动多次,以满足UITableView第一行的显示需要,这又带来了另外一个问题,下拉刷新的View的frame也随之发生了改变,导致整个下拉刷新不可用了。
self.automaticallyAdjustsScrollViewInsets 这个属性是IOS7才有的新方法,目的就是为了让scrollView自动适应屏幕,如果self.automaticallyAdjustsScrollViewInsets = NO。
场景7:关于tableView左边空余15像素的问题;
左边总有空余的地方
解决方法:
[self.tableView setSeparatorInset:UIEdgeInsetsZero];
[self.tableView setLayoutMargins:UIEdgeInsetsZero];
- (void)tableView:(UITableView *)tableView willDisplayCell:(UITableViewCell *)cell forRowAtIndexPath:(NSIndexPath *)indexPath {
if ([cell respondsToSelector:@selector(setSeparatorInset:)]) {
[cell setSeparatorInset:UIEdgeInsetsZero];
}
if ([cell respondsToSelector:@selector(setLayoutMargins:)]) {
[cell setLayoutMargins:UIEdgeInsetsZero];
}
}
场景8:关于tableView多余分割线隐藏的问题
有时候下面的cell我们没用,但是还是有分割线,隐藏方法
[tableView setTableFooterView:[[UIView alloc] init]];
场景9:关于tableView的headerCell之间有间距的问题
这是由于tableView的style设置错误,前一种是UITableViewStylePlain,后一种是UITableViewStyleGrouped
要注意对style的理解,不是tableView有很多section就要选择UITableViewStyleGrouped,UITableViewStyleGrouped只是展现tableView的一种样式而已,与section有几个无关
场景10:关于select和Deselect的问题
这个问题纯眼拙~
选择和取消选择,方法名字长,细心细心再细心,不然一旦出错,调bug想不到是这出错真的会很辛苦~
场景11:隐藏单行分割线
cell.separatorInset = UIEdgeInsetsMake(0, 屏幕宽, 0, 0);