Большое название, выравнивание по центру
Я пытаюсь центрировать заголовок в режиме большого заголовка, но этот код не влияет. В AppDelegate:
func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool {
// Override point for customization after application launch.
let paragraphStyle = NSMutableParagraphStyle()
paragraphStyle.alignment = .center
UINavigationBar.appearance().largeTitleTextAttributes = [NSAttributedStringKey.paragraphStyle: paragraphStyle]
return true
}
3 ответа
Большой заголовок не может быть центрирован, он расположен слева и выровнен по левому краю. Размер заголовка не имеет значения, если вы хотите, чтобы заголовок центрировался, вы должны создать свой собственный.
Swift 4
Не нужно использовать LargeTitles. Установите это в ложь.
navigationController?.navigationBar.prefersLargeTitles = false
Измените размер шрифта текста заголовка на больший.
self.navigationController?.navigationBar.titleTextAttributes = [NSAttributedStringKey.font: UIFont.systemFont(ofSize: 25),NSAttributedStringKey.foregroundColor: UIColor.white,]
Красиво центрированный искусственный LargeTitle.
Я решил это, сделав заголовок навигационного элемента ни к чему. Затем установите пользовательский ярлык с моим текстом и добавьте ограничения на ярлык программным способом. Вот код ниже.
override func setupNavigationBar() {
navigationItem.title = .none
if #available(iOS 11.0, *) {
navigationController?.navigationBar.prefersLargeTitles = true
let titleLabel = UILabel()
titleLabel.text = "Home"
titleLabel.translatesAutoresizingMaskIntoConstraints = false
let targetView = self.navigationController?.navigationBar
targetView?.addSubview(titleLabel)
titleLabel.anchor(top: nil, left: nil, bottom: targetView?.bottomAnchor, right: nil, paddingTop: 0, paddingLeft: 0, paddingBottom: 0, paddingRight: 0, width: 222, height: 40)
titleLabel.centerXAnchor.constraint(equalTo: (targetView?.centerXAnchor)!).isActive = true
} else {
// Fallback on earlier versions
}
}
UINavigationBar автоматически центрирует свой titleView, пока есть достаточно места. Я предполагаю, что ваш код не повлияет на фактический кадр titleView, потому что у вас нет кнопки назад или rightBarButton, поэтому UINavigationBar автоматически продлевает titleView вправо.
Чтобы исправить это, вы можете добавить пустую кнопку правой панели или добавить собственный titleView с предопределенным фреймом