自定义 UITableView Header 设置背景颜色失败

Posted

技术标签:

【中文标题】自定义 UITableView Header 设置背景颜色失败【英文标题】:Custom UITableView Header set background colour fail 【发布时间】:2015-10-14 06:33:06 【问题描述】:

我创建了一个自定义的 UITableViewHeaderFooterView,tableview 的背景颜色是白色的。

self.contentView.backgroundColor = UIColor.clearColor()

但是,部分标题的背景始终显示为灰色。如何去除灰色背景??

因为我已经覆盖了 UITableView 的 drawRect 函数,所以我希望在标题视图后面出现一些东西。

我尝试了以下方法:

a) 将 UITableView 样式更改为 Grouped,问题出现了,但是表头不能粘在表格顶部。

b) 使用节标题而不是标题视图

func tableView(tableView: UITableView, titleForHeaderInSection section: Int) -> String?

标题的背景是透明的,但我有多个标签。

谁能帮我解决这个问题?

感谢@Omkar,设置正确方法

cell.layer.backgroundColor = UIColor.clearColor().CGColor

【问题讨论】:

您是否添加了一个自定义单元格作为页眉/页脚视图?如果是,则将自定义单元格的背景颜色设置为清除颜色。是否重写了 viewForHeaderInSection 方法? @OmkarGuhilot 是的,我已经覆盖了 viewForHeaderInSection 方法,并创建了一个自定义 UITableViewHeaderFooterView,我还设置了背景颜色以清除。这没用。但是将内容视图的背景颜色更改为除 clear 之外的其他颜色。 您是否设置了作为页眉/页脚视图的自定义单元格的背景颜色以清除颜色? 我使用 self.contentView.backgroundColor = UIColor.clearColor()。 self.backgroundColor = UIColor.clearColor() 已弃用 【参考方案1】:

您需要将内容视图的背景色设置为清除颜色,同时您还需要将tableView单元格的背景颜色设置为清除颜色。将它放在您的 viewForHeaderInSection 方法中。然后您将能够看到为 tableView 设置的颜色。

    YourCell.contentView.backgroundColor = UIColor.clearColor()
    YourCell.backgroundColor = UIColor.clearColor()

请找到我的代码的附加图像以及故事板中样式为普通样式的表格视图。而且我还添加了运行后的样子

谢谢

【讨论】:

@Joe SHI 你能做到吗?因为我已经实现了相同的代码并且它可以工作 不行,我已经把表格单元格的背景和内容视图的背景都改成清除了,否则我将看不到彩色圆点下的线条。你确定你使用的是 UITableViewPlain 样式。如果我更改为 UITableViewGrouped,它可以工作,但标题没有粘在顶部 是的,我正在使用 UItableViewPlain 样式。要我附上代码吗?为此,我将不得不再次发布答案 如能分享代码,不胜感激。 我已编辑答案并将代码作为图像添加到其中【参考方案2】:

这是我的 ViewController 代码,唯一的区别是我使用了 headerfootview 子类。我将 tableview 的背景设置为蓝色,如果我往下拉一点,你会看到标题上看起来像一个蒙版。

class ViewController: UIViewController, UITableViewDataSource, UITableViewDelegate 

@IBOutlet weak var tableView: UITableView!


override func viewDidLoad() 
    super.viewDidLoad()
    tableView.dataSource = self
    tableView.delegate = self
    tableView.registerClass(UITableViewHeaderFooterView.self, forHeaderFooterViewReuseIdentifier: "HeaderCell")

    // Do any additional setup after loading the view, typically from a nib.


override func didReceiveMemoryWarning() 
    super.didReceiveMemoryWarning()
    // Dispose of any resources that can be recreated.



func numberOfSectionsInTableView(tableView: UITableView) -> Int 
    return 4


func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int 
    return 10


func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell 
    let cell = tableView.dequeueReusableCellWithIdentifier("CustomCell", forIndexPath: indexPath)
    cell.textLabel?.text  = "\(indexPath.row)"
    return cell


func tableView(tableView: UITableView, viewForHeaderInSection section: Int) -> UIView? 
    let cell = tableView.dequeueReusableHeaderFooterViewWithIdentifier("HeaderCell") as UITableViewHeaderFooterView!

    cell!.textLabel?.text = "Header"
    cell!.contentView.backgroundColor = UIColor.clearColor()
    cell.backgroundColor = UIColor.clearColor()

    return cell

【讨论】:

@omkar Guhilot,如果我滚动到底部并向后滚动。面具消失了。

以上是关于自定义 UITableView Header 设置背景颜色失败的主要内容,如果未能解决你的问题,请参考以下文章

UITableView 检测section header的停靠和脱离

如何取到uitableview的自定义的sectionheader

可扩展 UiTableView 的自定义单元格

UISegmentedControl 在 UITableView Header 上的行为很奇怪

apache设置自定义header

如何在带有标题视图和 UITableview 的自定义视图中正确设置 UISearchbar 的动画?