问题描述:
两种办法。
方法一:判断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,这种方法就无法使用了:
方法二:在顶部添加一个View,View要和顶部颜色相同,设置如下约束:
*(适用顶部为纯颜色的情况)
①View的顶部和【tableView顶部对齐的控件】对齐(解释:比如tableView的顶部和navigationBar底部对齐,那View也和navigationBar底部对齐;如果tableView的顶部和控制器的self.view的顶部对齐,那View也和控制器的self.view的顶部对齐)
②View的底部和tableView顶部对齐。
(注:如果使用的是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的搜索结果_百度图片搜索 )