iOS 处理tableView下拉时顶部出现的空白

问题描述:

下拉顶部出现空白示例图

两种办法。


方法一:判断offset设置tableView的背景颜色

*(适用只有一个section的情况|适用顶部为纯颜色的情况)

来源:Ios 处理tableview下拉时,顶部出现白色区域

核心代码如下:

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

    // float offset = scrollView.contentOffset.y;

    if (scrollView.contentOffset.y<0) {

        self.tableView.backgroundColor = [UIColor darkBlueColor];//和顶部区域同色

    } else {

        self.tableView.backgroundColor = [UIColor whiteColor];//还原tableView背景色

    }

}

补充:需要给tableView设置一个tableFooterView,高度为最后一个cell的底边到tableView底部的差值。

如果是多个section,这种方法就无法使用了:

多section的tableView改变backgroundColor示意图

方法二:在顶部添加一个View,View要和顶部颜色相同,设置如下约束:

*(适用顶部为纯颜色的情况)

①View的顶部和【tableView顶部对齐的控件】对齐(解释:比如tableView的顶部和navigationBar底部对齐,那View也和navigationBar底部对齐;如果tableView的顶部和控制器的self.view的顶部对齐,那View也和控制器的self.view的顶部对齐)

②View的底部和tableView顶部对齐。

Masonry示例代码

(注:如果使用的是frame而不是约束,则在scrollViewDidScroll:方法里根据滑动offset更改这个View的高度)

代码执行效果



方法三:在- (void)scrollViewDidScroll:方法里修改顶部的View的高度

*(适用顶部为纯颜色的情况|适用顶部为图片的情况)

补充:①不需要新自定义View,就是原有的顶部的那个View

②不能是tableHeaderView或者是collectionHeaderView(因为不好动态改高度),如果已经写成了以上两种,需要改写成自定义View,然后使用addSubView添加到tableView/collectionView上,再给tableView/collectionView设置contentOffset即可实现headerView的效果。

③图片填充方式(imageView.contentMode)要设置为UIViewContentModeScaleAspectFill或UIViewContentModeScaleAspectFit

④改变高度代码如下(代码中bannerView为顶部的图片,bannerHeight就是顶部View的高度,这两个是需要根据需求自行修改的变量)

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

 if(-scrollView.contentOffset.y>=bannerHeight) {

        //这里要同时修改y

 bannerView.frame=CGRectMake(0, scrollView.contentOffset.y, ScreenWidth, -scrollView.contentOffset.y);

    }

}

向下拉放大顶部图片运行示例图

(banner图源banner的搜索结果_百度图片搜索 )

你可能感兴趣的:(iOS 处理tableView下拉时顶部出现的空白)