Вот очень простой пример.
- Пользовательский
UIView
подкласс - При инициализации:
- добавляет
UINavigationBar
к себе - добавляет кнопку «Добавить», заголовок и кнопку «Готово» на панель
- устанавливает полосу
.tintColor
на красный - ограничивает полосу к вершине и ширине самой
- TestingViewController создает и добавляет пользовательский вид
Весь код - без @IBOutlet
или @IBAction
соединений - поэтому просто назначьте новый контроллер вида для TestingViewController
класс:
class MyCustomView: UIView {
let myNavBar = UINavigationBar()
override init(frame: CGRect) {
super.init(frame: frame)
commonInit()
}
required init?(coder: NSCoder) {
super.init(coder: coder)
commonInit()
}
func commonInit() -> Void {
backgroundColor = .systemTeal
addSubview(myNavBar)
myNavBar.translatesAutoresizingMaskIntoConstraints = false
NSLayoutConstraint.activate([
myNavBar.topAnchor.constraint(equalTo: topAnchor),
myNavBar.leadingAnchor.constraint(equalTo: leadingAnchor),
myNavBar.trailingAnchor.constraint(equalTo: trailingAnchor),
])
myNavBar.tintColor = .red
let navItem = UINavigationItem(title: "MyNavBar")
let addItem = UIBarButtonItem(barButtonSystemItem: .add, target: nil, action: #selector(addTapped(_:)))
let doneItem = UIBarButtonItem(barButtonSystemItem: .done, target: nil, action: #selector(doneTapped(_:)))
navItem.leftBarButtonItem = addItem
navItem.rightBarButtonItem = doneItem
myNavBar.setItems([navItem], animated: false)
}
@objc func addTapped(_ sender: Any?) -> Void {
print("Add tapped!")
}
@objc func doneTapped(_ sender: Any?) -> Void {
print("Done tapped!")
}
}
class TestingViewController: UIViewController {
override func viewDidLoad() {
super.viewDidLoad()
let myView = MyCustomView()
myView.translatesAutoresizingMaskIntoConstraints = false
view.addSubview(myView)
let g = view.safeAreaLayoutGuide
NSLayoutConstraint.activate([
myView.topAnchor.constraint(equalTo: g.topAnchor, constant: 100.0),
myView.heightAnchor.constraint(equalToConstant: 200.0),
myView.widthAnchor.constraint(equalToConstant: 280.0),
myView.centerXAnchor.constraint(equalTo: g.centerXAnchor, constant: 0.0),
])
}
}
Результат: