Как применить градиентную маску к заголовку навигации - PullRequest
0 голосов
/ 04 ноября 2019

Я хочу создать маску градиента с заголовком навигации. Я видел много вопросов по S / OF для градиента navigationBar, но не сам заголовок.

У меня есть пользовательский NavigationBarTitleView class, как показано ниже;

class NavigationTitleView: UIView {

    override init(frame: CGRect) {
        super.init(frame: frame)
        let gradient = CAGradientLayer()
        gradient.colors = [UIColor.red.cgColor, UIColor.blue.cgColor]
        gradient.startPoint = CGPoint(x: 0.0, y: 0.5)
        gradient.endPoint = CGPoint(x: 1.0, y: 0.5)
        gradient.frame = self.bounds
        self.layer.addSublayer(gradient)

        let label = UILabel(frame: self.bounds)
        label.text = "TITLE"
        label.font = UIFont.boldSystemFont(ofSize: 20)
        label.textAlignment = .center
        self.addSubview(label)


        self.mask = label
    }

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

Затем я назначаю это для моего navigationBar.titleView, однако это не влияет на navigationBar, и пользовательское представление не применяется.

Я пробовал кадры против ограничений, и оба дают тот же результат, что ивыше.

ДОБАВЛЕНИЕ НАВИГАЦИОННОГО НАЗВАНИЯ

private var navigationTitleView: NavigationTitleView = {
        let view = NavigationTitleView()
        view.translatesAutoresizingMaskIntoConstraints = false
        view.heightAnchor.constraint(equalToConstant: 44).isActive = true
        view.widthAnchor.constraint(equalToConstant: 100).isActive = true
        return view
    }()

self.navigationController?.navigationItem.titleView = navigationTitleView
...