UITableView 项目中遇到的问题

1.当设置UITableViewCell 的selectedBackgroundView时,发现选中cell时,cell高亮背景的高度比cell要高一些
原因:这个cell子类化以后,重写了awakeFromNib 或者 layoutSubviews方法,
但是没有调用super的方法导致
当调用父类的layoutsubviews时,内部会将selectedbackgroundview与cell的frame保持一致
当然如果发现某个view有其他莫名其妙的布局问题时,请检测下是否有layoutSubviews未调用super的
解决:awakeFromNib 或者 layoutSubviews方法要调用下super的

2.当设置UITableView的style为组样式时,tableView顶部会有空白的间距
解决:

tableView = [[EYTableView alloc] initWithFrame:CGRectZero style:UITableViewStyleGrouped];
// 隐藏UITableViewStyleGrouped上边多余的间隔
tableView.tableHeaderView = [[UIView alloc] initWithFrame:CGRectMake(0, 0, 0, CGFLOAT_MIN)];

// 隐藏UITableViewStyleGrouped下边多余的间隔
- (CGFloat)tableView:(UITableView *)tableView heightForFooterInSection:(NSInteger)section {
    return CGFLOAT_MIN;
}

注意:若传入的 height == 0,则 height 被设置成默认值
若 height 小于屏幕半像素对应的高度,则不会被渲染,所以这里返回CGFLOAT_MIN,其实返回0.01也是可以的,0.1 和 CGFLOAT_MIN是等效的

3.UITableView在UITableViewStylePlain样式下,取消headerView的黏结性,滚动tableVIEW时不浮动
解决方法1:
此种方法会导致tableView底部会出现边距

- (void)scrollViewDidScroll:(UIScrollView *)scrollView {

   if(scrollView.contentOffset.y <= kNoNetworkTipView_Height&&scrollView.contentOffset.y >= 0) {
       scrollView.contentInset = UIEdgeInsetsMake(-scrollView.contentOffset.y, 0, 0, 0);
    } else if (scrollView.contentOffset.y >= kNoNetworkTipView_Height) {
      scrollView.contentInset = UIEdgeInsetsMake(-kNoNetworkTipView_Height, 0, 0, 0);
    }
}

解决方法2:
和第一个没太大本质区别,在自定义headSectionView中重写setframe方法来重载table的section

// 自定义一个headSectionView
@interface NetworkTipview : UIView

@property (nonatomic, weak) UITableView *tableView;
@property (nonatomic, assign) NSInteger section;

@end

@implementation NetworkTipView

// 重写setFrame 让tableView滚动时,headerSectionView跟随滚动,当然在创建这个header时需要传入tableView和section
- (void)setFrame:(CGRect)frame{
    CGRect sectionRect = [self.tableView rectForSection:self.section];
    CGRect newFrame = CGRectMake(CGRectGetMinX(frame), CGRectGetMinY(sectionRect), CGRectGetWidth(frame),CGRectGetHeight(frame));
 [super setFrame:newFrame];
}

@end

你可能感兴趣的:(UITableView 项目中遇到的问题)