Я только что сделал минимальный проект, протестировал его на iPhone 11 Pro Max, потому что это тот, который вы используете на скриншоте, и, похоже, он работает так, как вы хотите:
class BaseViewController: UIViewController {
let titleLabel: UILabel = {
$0.textAlignment = .center
return $0
}(UILabel())
override func viewDidLoad() {
super.viewDidLoad()
view.backgroundColor = .white
view.addSubview(titleLabel)
titleLabel.translatesAutoresizingMaskIntoConstraints = false
titleLabel.centerXAnchor.constraint(equalTo: view.centerXAnchor).isActive = true
titleLabel.topAnchor.constraint(equalTo: view.safeAreaLayoutGuide.topAnchor).isActive = true
titleLabel.heightAnchor.constraint(equalToConstant: 50.0).isActive = true
}
}
class MainTabController: UITabBarController {
let home = ViewControllerA()
let browse = ViewControllerB()
let bag = ViewControllerC()
let settings = ViewControllerD()
override func viewDidLoad() {
super.viewDidLoad()
viewControllers = [home, browse, bag, settings]
selectedIndex = 0
home.tabBarItem = UITabBarItem(title: "Home", image: nil, selectedImage: nil)
browse.tabBarItem = UITabBarItem(title: "Browse", image: nil, selectedImage: nil)
bag.tabBarItem = UITabBarItem(title: "Bag", image: nil, selectedImage: nil)
settings.tabBarItem = UITabBarItem(title: "Settings", image: nil, selectedImage: nil)
}
}
class ViewControllerA: BaseViewController {
override func viewDidLoad() {
super.viewDidLoad()
titleLabel.text = "Home"
}
}
// ...
Мне интересно, как вы установите root контроллер представления окна вашего приложения, потому что это может быть проблемой здесь.
Вы используете safeAreaLayoutGuide
, чтобы ограничить вид сверху, чтобы он будет хорошо смотреться на любых устройствах (потому что у вас уже установлена высота 50). базовый класс и размещение метки наверху - определенно не лучший подход, и на самом деле я бы не рекомендовал вам это делать.
Причина в том, что вы пытаетесь сделать как раз роль панели навигации .
Если вы хотите, чтобы панель навигации соответствовала стилю вашего экрана, чтобы она выглядела так же, как ваш снимок экрана, это довольно просто, и вы можете просто изменить цвет фона панели навигации на прозрачный, например .
Нет необходимости в базовом классе, вы можете просто установить свойство title вашего контроллера представления, и, что более важно, вы получите все анимации заголовков бесплатно!