如何设置 UITableView 空白空间的 backgroundColor 不同?

Posted

技术标签:

【中文标题】如何设置 UITableView 空白空间的 backgroundColor 不同?【英文标题】:How to set UITableView empty space's backgroundColor different? 【发布时间】:2018-11-02 07:36:54 【问题描述】:

这是一个包含 5 个单元格和一个部分的 tableView。拉动tableView刷新时有蓝色间隙。

代码如下:

- (UITableView *)salesRankTableView
    if(!_salesRankTableView)
        _salesRankTableView = [[UITableView alloc] initWithFrame: CGRectMake(8, 183, KScreenWidth - 16, KScreenHeight-183-64) style: UITableViewStyleGrouped];

        [_salesRankTableView registerNib: [UINib nibWithNibName: NSStringFromClass(SalesRankTableViewCell.class) bundle:nil] forCellReuseIdentifier: kSalesRankTableViewCell];
        _salesRankTableView.layer.contents = (__bridge id _Nullable)([UIImage imageNamed: @"blue"].CGImage);

        MJRefreshNormalHeader *header = [MJRefreshNormalHeader headerWithRefreshingTarget: self refreshingAction: @selector(rankRefresh)];
        header.layer.contents = (__bridge id _Nullable)([UIImage imageNamed: @"white"].CGImage);
        _salesRankTableView.mj_header = header;
    

    return _salesRankTableView;




- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView
    return 1;


- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
    return 5;



- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath
    return 56;



- (UIView *)tableView:(UITableView *)tableView viewForHeaderInSection:(NSInteger)section
    return [UIView new];



- (UIView *)tableView:(UITableView *)tableView viewForFooterInSection:(NSInteger)section
    return [UIView new];


- (CGFloat)tableView:(UITableView *)tableView heightForHeaderInSection:(NSInteger)section
    return CGFLOAT_MIN;


- (CGFloat)tableView:(UITableView *)tableView heightForFooterInSection:(NSInteger)section
    return CGFLOAT_MIN;

为了去掉tableView前面的蓝色缝隙。我更改了 tableView 的背景颜色。并遇到了另一个问题。

tableView 的空白处的 backgroundColor 很重要。 如何设置不同?

代码如下:

- (UITableView *)salesRankTableView
    if(!_salesRankTableView)
        _salesRankTableView = [[UITableView alloc] initWithFrame: CGRectMake(8, 183, KScreenWidth - 16, KScreenHeight-183-64) style: UITableViewStyleGrouped];

        [_salesRankTableView registerNib: [UINib nibWithNibName: NSStringFromClass(SalesRankTableViewCell.class) bundle:nil] forCellReuseIdentifier: kSalesRankTableViewCell];
        _salesRankTableView.layer.contents = (__bridge id _Nullable)([UIImage imageNamed: @"white"].CGImage);

        MJRefreshNormalHeader *header = [MJRefreshNormalHeader headerWithRefreshingTarget: self refreshingAction: @selector(rankRefresh)];
        header.layer.contents = (__bridge id _Nullable)([UIImage imageNamed: @"white"].CGImage);
        _salesRankTableView.mj_header = header;
    

    return _salesRankTableView;


我之前用之前的代码在tableView后面插入了一个白色的view。

有点用力,如何做的更好?

【问题讨论】:

可能最简单的解决方案是保持白色背景,但还要观察contentSize 并相应地更改表格视图的高度。 你有两个部分或两个不同的单元格。不知道没有部分和没有行单元没有人了解你的确切问题。看看你是否有两个部分比 heightForHeaderInSection 和 heightForFooterInSection 返回 0. @Krishna kushwaha,只有一个部分,一种细胞 【参考方案1】:

尝试将_salesRankTableView的背景色设置为white

_salesRankTableView.backgroundColor = [UIColor clearColor]; // Newline
_salesRankTableView.mj_header.backgroundColor = [UIColor whiteColor];

更新:

替换下面的tableView委托方法:

func tableView(_ tableView: UITableView, heightForFooterInSection section: Int) -> CGFloat 

    return 0


func tableView(_ tableView: UITableView, viewForFooterInSection section: Int) -> UIView? 

    return UIView(frame: CGRect.zero)

【讨论】:

没用。标题视图是关联对象,用于拉刷新。 这符合第一张图片的情况。 答案已编辑。请检查。 “新行”评论的新事物和更新 对不起。首先,您需要了解 mj_header 是什么。 github.com/CoderMJLee/MJRefresh。我插入一个图层并观察tableView的偏移来解决它【参考方案2】:

你可以通过在 viewDidLoad() 中输入一行代码来实现

 self.tableView.tableFooterView = UIView()

这里的空闲单元格将被删除,如果您希望将 tableview 颜色更改为其他颜色,您可以通过更改 tableView 的背景颜色来实现。如果您希望超级视图背景的颜色作为可用空间,您应该将 tableview 背景颜色更改为“clear”。

 self.tableView.backgroundColor = UIColor.clear

希望它会有所帮助。

【讨论】:

谢谢粉丝。这是完美的解决方案 不适合我的情况。这是上层的情况。事实上,我使用github.com/CoderMJLee/MJRefresh。我认为答案是对回购做一些改变。而 Sulthan 的建议更适合。

以上是关于如何设置 UITableView 空白空间的 backgroundColor 不同?的主要内容,如果未能解决你的问题,请参考以下文章

iOS 移除 UITableView 下面的多余空间

如何使uitableview的最后一行填充空白

如何删除 UITableView 中的空白部分标题

具有自动布局的 iOS8 UITableView 在单元格上方有一个空白区域

如何在 UITableView 中制作最终页脚?

iOSUITableview cell 顶部空白的n种设置方法