Граница в заголовке TableView меняет цвет в темном режиме - PullRequest
0 голосов
/ 13 марта 2020

У меня проблема с тем, что у меня есть граница в моем заголовке, которая не меняет цвет в темном режиме. Я понимаю, что это потому, что я использую CGColour, но я не уверен, как решить эту проблему, поскольку я создаю слой внутри функции. Кажется, что создавать целый новый файл для представления границ для реализации traitCollectionDidChange() неудобно. Как я могу это исправить?

func tableView(_ tableView: UITableView, willDisplayHeaderView view: UIView, forSection section: Int) {
    let border = CALayer()
    border.borderColor = UIColor(named: "PrimaryColour")?.cgColor
    border.borderWidth = (1.0)
    border.frame = CGRect(x: 28, y: 33 - 1.0, width: folderTableView.frame.width-54, height: 1.0)

    view.layer.addSublayer(border)
}

1 Ответ

0 голосов
/ 13 марта 2020

Вам нужно сделать некоторую договоренность, чтобы получать уведомления при изменении коллекции признаков, чтобы вы могли сделать слой перерисовывающим свой цвет границы. Это не произойдет само по себе, и willDisplayHeaderView не будет вызываться магически снова только потому, что режим изменился.

Вот простой iOS проект, демонстрирующий CALayer, который слышит, когда черта коллекция изменилась и соответственно изменила свой цвет границы:

class MyLayer : CALayer {
    override init(layer: Any) {
        super.init(layer:layer)
    }
    override init() {
        super.init()
        self.borderColor = UIColor(named: "MyCoolColor")!.cgColor
        NotificationCenter.default.addObserver(self, selector: #selector(changed), name: Notification.Name(rawValue: "traitCollectionDidChange"), object: nil)
    }
    required init?(coder: NSCoder) {
        fatalError("init(coder:) has not been implemented")
    }
    @objc func changed(_:Notification) {
        self.borderColor = UIColor(named: "MyCoolColor")!.cgColor
    }
}
class ViewController: UIViewController {
    override func viewDidLoad() {
        super.viewDidLoad()
        let layer = MyLayer()
        layer.frame = CGRect(x: 100, y: 100, width: 100, height: 100)
        layer.borderWidth = 5
        self.view.layer.addSublayer(layer)
    }
    override func traitCollectionDidChange(_ previousTraitCollection: UITraitCollection?) {
        super.traitCollectionDidChange(previousTraitCollection)
        if self.traitCollection.hasDifferentColorAppearance(comparedTo: previousTraitCollection) {
            NotificationCenter.default.post(name: Notification.Name(rawValue: "traitCollectionDidChange"), object: self)
        }
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...