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