如何为 tableHeaderView 清除创建背景,但保留UITableView背景的其余部分不透明?
我正在使用透明tableHeaderView来实现paralax效果。 tableView后面的对象比clear tableHeaderView“窗口”长,所以我可以将可见数据居中。这适用于较长的列表,因为我可以使用tableView作为掩码,但是当表中没有足够的单元格时,背景对象将显示在单元格下方。
相关代码:
self.tableView.backgroundView = nil;
self.tableView.backgroundColor = [UIColor whiteColor];
UIView *tableHeaderView = [[UIView alloc] initWithFrame: CGRectMake(0.0, 0.0, 320.0, 250.0)];
tableHeaderView.backgroundColor = [UIColor clearColor];
self.tableView.tableHeaderView = tableHeaderView;
我已经尝试为tableView设置背景颜色,但这会使整个UITableView不透明(包括tableHeaderView),删除顶部的“窗口”。
关于如何在设置UITableView的主体不透明时保持透明tableHeaderView的任何想法?
谢谢!
答案 0 :(得分:5)
几天后我才弄清楚了。该解决方案的前提是在表格的 backgroundView 中添加子视图,并在滚动时更改子视图的框架。
viewDidLoad中的相关代码:
...
// Create the UIView that will become the tableView backgroundView
UIView *tableViewBackground = [[UIView alloc] initWithFrame:self.tableView.frame];
tableViewBackground.backgroundColor = [UIColor clearColor];
// Create the opaque backgroundView and set the frame so that it starts below the headerView
partialBackgroundView = [[UIView alloc] initWithFrame:CGRectMake(0, 250, 320.0, self.view.frame.size.height)];
partialBackgroundView.backgroundColor = [UIColor redColor];
// Add the partial background to the main background view and apply it to the tableView
[tableViewBackground addSubview:solidTableBodyBackgroundView];
self.tableView.backgroundView = tableViewBackground;
...
然后在滚动时,您可以更新scrollViewDidScroll中的“可见窗口”:
- (void)scrollViewDidScroll:(UIScrollView *)scrollView {
CGFloat scrollOffset = scrollView.contentOffset.y;
partialBackgroundView.frame = CGRectMake(0, 250 - scrollOffset, 320, self.view.frame.size.height);
// Other parallax code for scrolling
}
可能有更好的方法可以做到这一点,但我发现这很简单,效果很好。
答案 1 :(得分:5)
为多个部分执行接受答案的更简单方法
// Set the view for each cell with a clear color
-(UIView *)tableView:(UITableView *)tableView viewForHeaderInSection:(NSInteger)section {
UIView *view = [[UIView alloc] initWithFrame:CGRectMake(0, 0, 320, SectionHeaderHeight)]; //
view.backgroundColor = [UIColor clearColor];
return view;
}
// Set the height of your desired header
-(CGFloat)tableView:(UITableView *)tableView heightForHeaderInSection:(NSInteger)section {
return 10;
}
答案 2 :(得分:1)
Swift-5,透明节标题
ViewForSectionHeader
方法中返回此视图func tableView(_ tableView: UITableView, viewForHeaderInSection section: Int) -> UIView? {
return viewForSection
}
答案 3 :(得分:0)
除非我误解了某些内容,否则你应该分两步完成:
您需要使表格中的单元格不透明。将tableView的背景颜色设置为[UIColor clearColor],对于表头(以及部分标题,如果适用)的视图也是如此。
然后使用您的表格页脚视图(tableFooterView
的{{1}}属性),使其变得不透明,并使其非常高。如果表格中只有几个单元格,则表格页脚将占据屏幕的其余部分。
再一次,我可能会误解某些东西,但请放手一搏,看看你得到了什么。祝你好运!
答案 4 :(得分:0)
如果像我一样,在您的UITableViewHeaderFooterView
委托方法中返回viewForHeaderInSection
的子类作为标头视图,那么这是一个超级晚了但又快速简单的答案。
设置myHeaderView.backgroundColor = UIColor.clear
对您没有帮助?
尝试设置myHeaderView.layer.backgroundColor = UIColor.clear.cgColor
。