Не удается применить CAGradientLayer в качестве фонового представления UITableView - PullRequest
0 голосов
/ 06 декабря 2018

У меня есть UITableViewController, к которому я пытаюсь применить градиентный фон.

Я бы хотел, чтобы градиент был на всем виде, а не только на ячейке.

У меня естьрасширение с функцией, которую я вызываю в viewDidLoad.Я ожидаю, что это будет применено и будет видно за моим UITableView

Однако фон всегда белый.Я установил view.backgroundColor = UIColor.clear в том случае, если это был просто белый слой поверх моего градиента, однако он не отображается, так как фон теперь просто черный.

HomeController.swift

   extension HomeController {
        fileprivate func applyBackgroundGradientView() -> Void {
            let frame = CGRect(x: 0.0, y: 0.0, width: view.frame.size.width, height: view.frame.size.height)
            let bgView = UIView(frame: frame)
            bgView.layer.insertSublayer(gradientBackgroundView, at: 0)

            tableView.backgroundView = bgView
        }
    }

GradientBackgroundView.swift

class GradientBackgroundView: CAGradientLayer {

    override init() {
        super.init()
        setupGradientLayer()
    }

    required init?(coder aDecoder: NSCoder) {
        fatalError("init(coder:) has not been implemented")
    }

    fileprivate func setupGradientLayer() -> Void {

        self.colors = ["226320","256c23","39a636","267024"].map({ hex -> CGColor in
            return UIColor.hexStringToUIColor(hex: hex).cgColor
        })

        self.calculatePoints(for: 45)
    }
}

1 Ответ

0 голосов
/ 06 декабря 2018

Я не вижу рамки на вашем CAGradientLayer.

Если вы не настроите frame , ваше представление не будет отображаться.

let gradientBackgroundView = GradientBackgroundView()
gradientBackgroundView.frame = CGRect(x: 0.0, y: 0.0, width: view.frame.size.width, height: view.frame.size.height)
view.layer.insertSublayer(gradientBackgroundView, at: 0)
...