美文网首页
UITableView 项目中遇到的问题

UITableView 项目中遇到的问题

作者: 字节码 | 来源:发表于2017-05-10 02:50 被阅读95次

    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 项目中遇到的问题

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