Swift:更改TableView标题文本颜色 - 崩溃

时间:2017-08-25 00:47:12

标签: ios swift uitableview

使用Swift 3,我试图以编程方式更改Section的标题颜色。

如何将backgroundColor更改为白色,将Text Color更改为黑色?

部分标题会改变颜色,但不会显示任何文字,然后当我添加代码以更改标题文字颜色时,它会崩溃

  

由于未捕获的异常而终止应用   ' NSInvalidArgumentException',原因:'无法将自我添加为子视图'

Swift Code

// Title for Header
func tableView(_ tableView: UITableView, titleForHeaderInSection section: Int) -> String? {

    // Section Names
    let sectionNames = ["Followed Blogs", "All Blogs"]

    return sectionNames[section]
}

// View for Header
func tableView(_ tableView: UITableView, viewForHeaderInSection section: Int) -> UIView? {

    let headerView = UIView()

    let headerLabel = UILabel()
    let sectionNames = ["Followed Blogs", "All Blogs"]
    headerLabel.text = sectionNames[section]
    headerLabel.frame = CGRect(x: 45, y: 5, width: 100, height: 35)
    headerLabel.addSubview(headerLabel)

    if (section == 0) {

        headerView.backgroundColor = UIColor.green
        headerLabel.textColor = UIColor.black
    } else {

        if darkMode {

            headerView.backgroundColor = UIColor.white
            headerLabel.textColor = UIColor.black

        } else {

            headerView.backgroundColor = UIColor.black
            headerLabel.textColor = UIColor.white
        }
    }

    return headerView
}

// Height for Section
func tableView(_ tableView: UITableView, heightForHeaderInSection section: Int) -> CGFloat {

    return 45
}

2 个答案:

答案 0 :(得分:1)

headerLabel.addSubview(headerLabel)正在向self添加标签,这是您的错误来源

根据我对您的代码的理解,您可能应该使用headerView.addSubview(headerLabel)而不是

  

文字"关注博客"不适合它显示为"跟随B ..."

这(很可能)是一个布局问题,我个人会调查为标签添加自动布局约束,以便它绑定到父视图的顶部/底部/左/右边距

答案 1 :(得分:0)

这只是为了补充MadProgrammer的答案。我认为应该使用UIView

而不是UITableViewHeaderFooterView

用法:

  tableViewInstance.register(UITableViewHeaderFooterView.self, forHeaderFooterViewResuseIdentifier: "headerIdentifier")

然后在viewForHeaderInSection

let tableViewHeader = tableview.dequeueReusableHeaderFooterView(withIdentifier: "headerIdentifier")

btw,关于文字"Followed Blogs"因其标签的宽度对于当前字体来说太小而不合适。为什么不添加这样的约束:

 headerView.addConstraints(NSLayoutConstraint.constraints(withVisualFormat: "H:|-5-[label]-5-|",
                                                                   options: [],
                                                                   metrics: nil,
                                                                     views: ["tableView": headerLabel]))

 headerView.addConstraints(NSLayoutConstraint.constraints(withVisualFormat: "V:|-5-[label]-5-|",
                                                                   options: [],
                                                                   metrics: nil,
                                                                     views: ["tableView": headerLabel]))

你让你的tableView的headerHeight变得动态