Я хочу создать маску градиента с заголовком навигации. Я видел много вопросов по 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