如何使用不透明的主体为UITableView Header设置清晰的背景

时间:2013-11-22 20:52:42

标签: ios nstableheaderview uitableview

如何为 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的任何想法?

谢谢!

5 个答案:

答案 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,透明节标题

  1. 添加视图并将其背景设置为透明
  2. 然后在tableView的 ViewForSectionHeader 方法中返回此视图
func tableView(_ tableView: UITableView, viewForHeaderInSection section: Int) -> UIView? {
    return viewForSection
}

答案 3 :(得分:0)

除非我误解了某些内容,否则你应该分两步完成:

  1. 您需要使表格中的单元格不透明。将tableView的背景颜色设置为[UIColor clearColor],对于表头(以及部分标题,如果适用)的视图也是如此。

  2. 然后使用您的表格页脚视图(tableFooterView的{​​{1}}属性),使其变得不透明,并使其非常高。如果表格中只有几个单元格,则表格页脚将占据屏幕的其余部分。

  3. 再一次,我可能会误解某些东西,但请放手一搏,看看你得到了什么。祝你好运!

答案 4 :(得分:0)

如果像我一样,在您的UITableViewHeaderFooterView委托方法中返回viewForHeaderInSection的子类作为标头视图,那么这是一个超级晚了但又快速简单的答案。

设置myHeaderView.backgroundColor = UIColor.clear对您没有帮助?

尝试设置myHeaderView.layer.backgroundColor = UIColor.clear.cgColor