UITableView 在单元格下方扩展不同的背景颜色

Posted

技术标签:

【中文标题】UITableView 在单元格下方扩展不同的背景颜色【英文标题】:UITableView extend different background color below cells 【发布时间】:2013-11-26 22:56:46 【问题描述】:

我有一个UITableView,我给了一个绿色背景的headerView。我还给UITableView 赋予了相同的绿色背景色,这样当tableView 被拉下时,感觉就像tableView 上方的无缝颜色。完美运行。

问题是我的tableView 只有 4 行,在它下面又显示绿色。

如何在行下方显示白色,以便在下拉 tableView 时只看到绿色背景色?

【问题讨论】:

也许添加一个白色的tableview footerView? @johan 试过了,但它只会产生一个白色块(视图)并且不会像我希望的那样进入单元格下方的无穷大。 感谢您提出这个问题。我和你的情况一样。 【参考方案1】:

您可以添加额外的顶视图,与this answer to UIRefreshControl Background Color 相同:

CGRect frame = self.tableView.bounds;
frame.origin.y = -frame.size.height;

UIView *bgView = [[UIView alloc] initWithFrame:frame];
bgView.backgroundColor = [UIColor greenColor];

[self.tableView insertSubview:bgView atIndex:0]; 

【讨论】:

解决了!感谢您的精彩回答!【参考方案2】:

您可以添加第五个没有内容的单元格,并将其设为 400 磅高,并限制表格 contentView 的大小,以便您无法滚动到该单元格的底部。

-(void)viewWillLayoutSubviews 
    self.tableView.contentSize = CGSizeMake(self.tableView.frame.size.width, 500);


-(CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath 
    CGFloat h = (indexPath.row == 4)? 400:44;
    return h;

将 contentSize 设置放入 viewWillLayoutSubviews 可确保在您旋转设备时将其重置为该值。

【讨论】:

【参考方案3】:

正如我在这些 cmets 中所说,这样 headerView 将位于导航栏下方,如果您拉下 tableview,您将看到 headerView 绿色。所以你可以为 tableView 设置白色: (我测试了它并工作)

-(void) viewDidLoad 

    self.tableView.backgroundColor = [UIColor whiteColor];

    headerView = [[UIView alloc] init];
    headerView.backgroundColor = [UIColor greenColor];

    UILabel *lab = [[UILabel alloc] initWithFrame:CGRectMake(0, -50, 320, 120)];
    lab.backgroundColor = [UIColor greenColor];
    [headerView addSubview:lab];

    self.tableView.tableHeaderView = headerView;

 


#pragma mark - Table view data source
-(CGFloat)tableView:(UITableView *)tableView heightForHeaderInSection:(NSInteger)section 

  return 80;




-(UIView*)tableView:(UITableView *)tableView viewForHeaderInSection:(NSInteger)section 

  return headerView;




- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView

  // Return the number of sections.
  return 1;

【讨论】:

对不起,我想你误会了。细胞是白色的。 TableView 背景颜色和 headerView 是绿色的。单元格下方也是绿色的,因为那是 tableView 背景颜色。但我希望下面的单元格也是白色的。 @Nic Hubbard 有误会。您将只有单元格和标题视图绿色,对吗?桌子的其余部分是白色的? 不,单元格是白色的。请使用示例图片查看我更新的问题。 @Nic Hubbard 好的,如果你创建一个更高的 headerview 但只显示你想要的,例如 header 的视图是 150px 高并且在 tableview 的委托方法中你返回 50 px?我不尝试这个,但如果这个工作你可以给 tableview 赋予白色 @llario 听起来是个好主意,但没有设置 tableView 标头高度的委托方法,它只是基于您设置为该属性的视图有多高.【参考方案4】:

与接受的答案相同 - 在 Swift 5 中:

var frame : CGRect = self.tableView.bounds
frame.origin.y = -frame.size.height

let bgView : UIView = UIView.init(frame: frame)
bgView.backgroundColor = UIColor.green

self.tableView.insertSubview(bgView, at: 0)

还要添加以下代码(紧跟在上述代码之后)以确保它适用于其他尺寸的设备:

bgView.translatesAutoresizingMaskIntoConstraints = true
bgView.autoresizingMask = [UIView.AutoresizingMask.flexibleWidth]

【讨论】:

以上是关于UITableView 在单元格下方扩展不同的背景颜色的主要内容,如果未能解决你的问题,请参考以下文章

UITableView 与单元格下方的 UIView

UITableView 自定义部分标题出现在单元格下方

UITableView 中的奇怪行为 - 一个单元格显示不同

uitableview 单元格背景的问题

UITableView 单元格布局与 iPhone 12 pro 和 promax 的区别

静态部分/单元格的 UITableView 背景图像