Как изменить заголовок реестра, используя prefersLargeTitles? - PullRequest
2 голосов
/ 27 марта 2019

Я знаю, что можно задать семейство шрифтов, размер и цвет шрифта отдельно для «больших» и «маленьких» заголовков, используя prefersLargeTitles.

Вопрос: есть ли варианты для контроллера навигации?чтобы отобразить «большой заголовок» в открытой навигационной панели в верхнем регистре?

enter image description here

Теперь я использую пользовательский контроллер навигации:

class MyNavigationController: UINavigationController {

    public var titleSaved: String?

    override func viewDidLayoutSubviews() {
        super.viewDidLayoutSubviews()

        guard let topItem = navigationBar.topItem else {
            return
        }

        if navigationBar.frame.size.height > 60 {
            topItem.title = topItem.title?.uppercased()
        } else {
            if let titleSaved = titleSaved {
                topItem.title = titleSaved
            } else {
                topItem.title = topItem.title?.applyingTransform(StringTransform(rawValue: "Title"), reverse: false)
            }
        }
    }
}

Установить заголовок из View Controlle:

class MyViewController: UIViewController {

    override func viewDidLoad() {
        super.viewDidLoad()

        navigationController?.navigationBar.prefersLargeTitles = true

        let title = "Sign In"
        navigationItem.title = title

        if let nc = navigationController as? MyNavigationController {
            nc.titleSaved = title
        }
    }

}

это решение работает, но когда вы переключаетесь с "большого" заголовка на "маленькое" название и наоборот, оно дергается и выглядит довольно глючно

Ответы [ 3 ]

5 голосов
/ 06 апреля 2019

Вы можете использовать заглавные буквы для «большого заголовка» и заглавные для «маленького заголовка», используя шрифты с маленькими заглавными буквами

Замените titleTextAttributes другим шрифтом и поменяйте largeTitleTextAttributesс заглавными буквами

class ViewController: UITableViewController {

    override func viewDidLoad() {
        super.viewDidLoad()

        self.title = "Sign In"
        self.navigationController?.navigationBar.prefersLargeTitles = true
        self.navigationController?.navigationBar.titleTextAttributes = [NSAttributedString.Key.foregroundColor: UIColor.red]
        self.navigationController?.navigationBar.largeTitleTextAttributes = [.foregroundColor: UIColor.red,
                                                                             .font:UIFont(name: "Panton-LightCaps", size: 30)!]
    }
}

Или Вы можете настроить свой шрифт.Я создал новый стиль шрифта с использованием OpenSans в http://www.glyphrstudio.com/online/

Вы можете скачать его здесь

self.title = "Sign In"
self.navigationController?.navigationBar.prefersLargeTitles = true
self.navigationController?.navigationBar.titleTextAttributes = [.font:UIFont(name: "OpenSans-Regular", size: 30)!]
self.navigationController?.navigationBar.largeTitleTextAttributes = [.font:UIFont(name: "MyFontRegular", size: 30)!]

enter image description here

0 голосов
/ 02 апреля 2019

Вы просто пытаетесь установить заголовок панели навигации в верхнем регистре.и установите pregfersLargeTitles как true

self.navigationController?.navigationBar.prefersLargeTitles = true
self.title = "title".uppercased()

Проверьте это:

enter image description here

0 голосов
/ 02 апреля 2019

Вы можете попробовать вот так:

navigationController?.navigationBar.prefersLargeTitles = true 
let NavigationTitle = "Sign in"
navigationController?.navigationBar.topItem?.title = NavigationTitle.uppercased()
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...