UIColor.Clear 在swift3的部分标题中使用时没有给出预期的结果

Posted

技术标签:

【中文标题】UIColor.Clear 在swift3的部分标题中使用时没有给出预期的结果【英文标题】:UIColor.Clear not giving expected result when using in section header in swift3 【发布时间】:2017-08-02 20:56:59 【问题描述】:

我有一个使用 Swift3 构建的应用程序,带有一个表格视图。我使用情节提要,并且 tableview 放置在视图控制器内。我正在使用部分并通过代码设置部分标题。我希望部分标题显示我为表格视图设置的相同灰色背景。我尝试设置相同的颜色代码,但没有帮助。所以我尝试设置为 UIColor.clear,但它显示为节标题的白色背景。我需要它来使用 tableview 背景。你能指导我怎么回事吗?

代码:

    func tableView(_ tableView: UITableView, willDisplayFooterView view: UIView, forSection section: Int) 
        print("willDisplayFooterView.. for section \(section) ")
        (view as! UITableViewHeaderFooterView).backgroundView?.backgroundColor = UIColor.clear //UIColor(red: 232.0, green: 232.0, blue: 232, alpha: 1.0) 
    

    func tableView(_ tableView: UITableView, willDisplayHeaderView view: UIView, forSection section: Int) 
        print("willDisplayHeaderView,... for section \(section) ")
        (view as! UITableViewHeaderFooterView).backgroundView?.backgroundColor = UIColor.clear //UIColor(red: 232.0, green: 232.0, blue: 232, alpha: 1.0) 
    

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

        print("titleForHeaderInSection")
        return self.section [section ]
    

我尝试使用 viewForHeaderInSection,但它根本没有被调用。

func tableView(tableView: UITableView, viewForHeaderInSection section: Int) -> UIView? 

        print("in viewForHeaderInSection")
        let view = UIView() 
        let label = UILabel()

        label.text = self.section [section ]            
        view.addSubview(label)
        view.backgroundColor = UIColor.clear

        label.translatesAutoresizingMaskIntoConstraints = false

        let horizontallayoutContraints = NSLayoutConstraint(item: label, attribute: .centerX, relatedBy: .equal, toItem: view, attribute: .centerX, multiplier: 1, constant: 0)
        view.addConstraint(horizontallayoutContraints)

        let verticalLayoutContraint = NSLayoutConstraint(item: label, attribute: .centerY, relatedBy: .equal, toItem: view, attribute: .centerY, multiplier: 1, constant: 0)
        view.addConstraint(verticalLayoutContraint)

        return view
    

【问题讨论】:

【参考方案1】:

尝试设置视图的背景颜色..而不是 view.backgroundView

func tableView(_ tableView: UITableView, willDisplayFooterView view: UIView, forSection section: Int) 
        print("willDisplayFooterView.. for section \(section) ")
        (view as! UITableViewHeaderFooterView).backgroundColor = UIColor.clear //UIColor(red: 232.0, green: 232.0, blue: 232, alpha: 1.0) 
    

func tableView(_ tableView: UITableView, willDisplayHeaderView view: UIView, forSection section: Int) 
        print("willDisplayHeaderView,... for section \(section) ")
        (view as! UITableViewHeaderFooterView).backgroundColor = UIColor.clear //UIColor(red: 232.0, green: 232.0, blue: 232, alpha: 1.0) 
    

免责声明:我不太擅长快速语法。但希望这能回答您的问题。

【讨论】:

嗨.. 仍然没有给我预期的行为。我尝试按照您的建议使用并收到警告说这是一种已弃用的行为,而是使用 contentView 背景颜色。所以我尝试使用它,但仍然没有运气。 func tableView(_ tableView: UITableView, willDisplayFooterView view: UIView, forSection section: Int) print("willDisplayFooterView.. for section(section)") (view as! UITableViewHeaderFooterView).contentView.backgroundColor = UIColor.clear 你是否覆盖了这个方法? “func tableView(tableView: UITableView, viewForHeaderInSection section: Int) -> UIView?” 嗨..正如我在原始问题中编辑的那样,我尝试使用 viewForHeaderInSection,但它根本没有被调用。 尝试在section方法中覆盖header的高度 是的,我确实有一个对 heightForHeaderInSection 的覆盖,这就是我为我的部分标题设置高度的地方。我不确定如何设置背景颜色以清除。【参考方案2】:

你可以改变 contentView 的背景颜色而不是 backgroundView

(view as! UITableViewHeaderFooterView).contentView?.backgroundColor = UIColor. groupTableViewBackground

【讨论】:

是的,我也尝试过,按照 Marcio 的建议,但没有奏效。 Marcio 建议更改视图的 backgroundColor 而不是 contentView。您是否尝试过更改视图 contentView 的 backgroundColor ? 是的,我尝试按照他的建议使用并收到警告说这是一种已弃用的行为,而是使用 contentView 背景颜色。所以我尝试使用它,但仍然没有运气。 func tableView(_ tableView: UITableView, willDisplayFooterView view: UIView, forSection section: Int) print("willDisplayFooterView.. for section(section)") (view as! UITableViewHeaderFooterView).contentView.backgroundColor = UIColor.clear

以上是关于UIColor.Clear 在swift3的部分标题中使用时没有给出预期的结果的主要内容,如果未能解决你的问题,请参考以下文章

如何在 CAShapeLayer 上仅填充形状的一部分

将@IBDesignable 用于渐变视图

给导航条设置成颜色的背景图像 : UIGraphicsBeginImageContext ...

更改UIButton中标题的背景颜色

使用swift3在tableview中搜索栏和部分

iOS:在 Swift3 中,在 UICollectionViewLayout 部分,我如何访问主要的 CollectionView 属性?