Проблемы CAGradient Layer с UITableViewCell - PullRequest
0 голосов
/ 05 апреля 2019

ОК, поэтому мне нужно добавить градиент в свой пользовательский UITableViewCell.

В ячейке init я добавляю ее дочерние элементы и ограничиваю их.

После этого мне нужнодобавить градиент к одному из его потомков, который является UIImageView.

Я делаю это как:

imgView.layer.addSublayer(mainGradient(imgView.frame.size.width, imgView.frame.size.height))

Похоже, проблема в том, что при UITableViewCell.init вы не 'у него фактически есть кадр ячейки, поэтому, как только кадр imgView установлен ограничениями, у него также нет рамки, поэтому у градиента также нет рамки.

Я попытался добавитьслой по методу layoutSubviews, но в результате он добавляется только тогда, когда вы прокручиваете tableView, и каждый раз, когда вы его прокручиваете, вы добавляете новый слой, в результате чего он становится темнее при каждой прокрутке.

Есть идеи, как мне это сделать?

1 Ответ

0 голосов
/ 05 апреля 2019

В контроллере табличного представления создайте ссылку на свой градиентный слой, например:

var gradientLayer: CAGradientLayer!

В своем пользовательском классе ячеек создайте этот слой и добавьте его в качестве подслоя в функцию инициализации.

Затем, также в своем пользовательском классе ячеек, реализуйте layoutSubviews():

override func layoutSubviews() {
            super.layoutSubviews()
    gradientLayer.frame = imgView.bounds
}
...