Ошибка для установки backgroundColor UITableHeaderFooterView - PullRequest
0 голосов
/ 13 ноября 2018

У меня есть собственный класс Header для моих таблиц, и всякий раз, когда он используется, я получаю эту ошибку:

[TableView] Установка цвета фона для UITableViewHeaderFooterView устарела.Установите вместо этого пользовательский UIView с желаемым цветом фона для свойства backgroundView.

Вот некоторые вещи, которые я пробовал:

Я добавил backgroundView в awakeFromNib () UITableViewHeaderFooterView.подкласс:

override func awakeFromNib() {
    super.awakeFromNib()
    self.backgroundView = UIView(frame: self.bounds)
    self.backgroundView?.backgroundColor = UIColor(red:0.84, green:0.47, blue:0.97, alpha:1.0)
}

Я добавил backgroundView в свою функцию tableView, которая определяет разделы заголовка:

func tableView(_ tableView: UITableView, viewForHeaderInSection section: Int) -> UIView? {
    if let headerView = tableView.dequeueReusableHeaderFooterView(withIdentifier: Header.identifier) as? Header {

        // Extraneous Code

        let backgroundView = UIView(frame: headerView.bounds)
        backgroundView.backgroundColor = UIColor(white: 0.5, alpha: 0.5)
        headerView.backgroundView = backgroundView

        // Extraneous code
    }
    return UIView()
}

После выполнения каждого из них я все еще получаю ошибку.

Ответы [ 4 ]

0 голосов
/ 13 ноября 2018

Мне удалось предотвратить появление ошибок. Вот как я это сделал:

Перейдите в Xib-файл заголовка и выберите цвет фона по умолчанию. Затем в функции viewForHeaderInSection добавьте:

let backgroundView = UIView(frame: CGRect.zero)
backgroundView.backgroundColor = UIColor(white: 0.5, alpha: 0.5)
headerView.backgroundView = backgroundView

Я знаю, что упомянул об этом в своем вопросе, но ключом было установить цвет фона xib как "по умолчанию".

0 голосов
/ 13 ноября 2018

Если вы можете создать подкласс UITableViewHeaderFooterView, вы можете попробовать этот подход.

class SampleHeaderView: UITableViewHeaderFooterView {
    override func awakeFromNib() {
        super.awakeFromNib()

        let bgView = UIView(color: .black)

        addSubview(bgView)

        bgView.translatesAutoresizingMaskIntoConstraints = false
        let layoutAttributes: [NSLayoutAttribute] = [.top, .leading, .bottom, .trailing]
        layoutAttributes.forEach { attribute in
            addConstraint(NSLayoutConstraint(item: bgView,
                                             attribute: attribute,
                                             relatedBy: .equal,
                                             toItem: self,
                                             attribute: attribute,
                                             multiplier: 1,
                                             constant: 0.0))
        }
    }
}

extension UIView {
    convenience init(color: UIColor) {
        self.init(frame: .zero)
        backgroundColor = color
    }
}
0 голосов
/ 13 ноября 2018

При использовании имени backgroundView вы не получаете сообщение об ошибке:

1) Неоднозначное использование 'backgroundView'

2) Невозможно переопределить изменяемое свойство 'backgroundView' '

3) Невозможно переопределить с помощью сохраненного свойства 'backgroundView'

поскольку вы не добавляете backgroundView, вы используете тот, который есть у UITableViewHeaderFooterView.

Для awakeFromNib:

override func awakeFromNib() {
    super.awakeFromNib()
    let bgView = UIView(frame: self.bounds)
    bgView.backgroundColor = UIColor(red:0.84, green:0.47, blue:0.97, alpha:1.0)
    self.addSubview(bgView)
}

Для viewForHeaderInSection:

func tableView(_ tableView: UITableView, viewForHeaderInSection section: Int) -> UIView? {
    if let headerView = tableView.dequeueReusableHeaderFooterView(withIdentifier: Header.identifier) as? Header {

    // Extraneous Code

        let bgView = UIView(frame: headerView.bounds)
        bgView.backgroundColor = UIColor(white: 0.5, alpha: 0.5)
        headerView.addSubview(bgView)

        return headerView
        // Extraneous code
    }
    return UIView()
}

Вам просто нужно изменить имя backgroundView на другое имя.

0 голосов
/ 13 ноября 2018

Проверьте, что вы должны установить headerView.backgroundColor = UIColor(white: 0.5, alpha: 0.5)

в вашей функции func tableView(_ tableView: UITableView, viewForHeaderInSection section: Int) -> UIView?.

Также этого будет достаточно, чтобы добавить цвет фона

 func tableView(_ tableView: UITableView, viewForHeaderInSection section: Int) -> UIView? {
     let backgroundView = UIView(frame: CGRect.zero)
     backgroundView.backgroundColor = UIColor(white: 0.5, alpha: 0.5)
     return backgroundView
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...