Градиентный фон размеров iPhone на iPad - PullRequest
1 голос
/ 02 октября 2019

У меня проблема с установкой градиентного фона на iPad. На iPhone все в порядке, но когда я использую iPad, градиентный фон имеет размеры iPhone.

This is the problem

Код, который я использую для создания градиента, включенниже.

func setGradientToTableView(tableView: UITableView) {

        let gradientBackgroundColors = [UIColor(red: 190.0/255.0, green: 219.0/255.0, blue: 0.0/255.0, alpha: 1).cgColor, UIColor(red: 13.0/255.0, green: 227.0/255.0, blue: 97.0/255.0, alpha: 1).cgColor]

        let gradientLayer = CAGradientLayer()
        gradientLayer.colors = gradientBackgroundColors
        gradientLayer.startPoint = CGPoint(x: 0,y: 0)

        gradientLayer.frame = tableView.bounds
        let backgroundView = UIView(frame: tableView.bounds)
        backgroundView.layer.insertSublayer(gradientLayer, at: 0)
        tableView.backgroundView = backgroundView
    }

Ответы [ 2 ]

3 голосов
/ 02 октября 2019

Вам нужно установить рамку для слоя в viewDidLayoutSubviews:

    override func viewDidLayoutSubviews() {
        super.viewDidLayoutSubviews()
        tableView.backgroundView?.layer.sublayers?.forEach { $0.frame = tableView.bounds }
    }

Также, как предлагает @Jan Schlorf в комментарии, вы можете сохранить свой слой как свойство:

    lazy var gradientLayer = CAGradientLayer()

    //...

    func setGradientToTableView(tableView: UITableView) {
        let gradientBackgroundColors = [UIColor(red: 190.0/255.0, green: 219.0/255.0, blue: 0.0/255.0, alpha: 1).cgColor, UIColor(red: 13.0/255.0, green: 227.0/255.0, blue: 97.0/255.0, alpha: 1).cgColor]

        gradientLayer.colors = gradientBackgroundColors
        gradientLayer.startPoint = CGPoint(x: 0,y: 0)

        gradientLayer.frame = tableView.bounds
        let backgroundView = UIView(frame: tableView.bounds)
        backgroundView.layer.insertSublayer(gradientLayer, at: 0)
        tableView.backgroundView = backgroundView
    }

    //...

    override func viewDidLayoutSubviews() {
        super.viewDidLayoutSubviews()
        gradientLayer.frame = tableView.bounds
    }

0 голосов
/ 02 октября 2019

Я предполагаю, что вы не использовали autolayout?

Проверьте размер таблицы при запуске приложения с iPad Simulator. Я думаю, что он не такой большой, как вы думаете.

...