Большое название, выравнивание по центру

Я пытаюсь центрировать заголовок в режиме большого заголовка, но этот код не влияет. В 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 с предопределенным фреймом

Другие вопросы по тегам