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 中的奇怪行为 - 一个单元格显示不同