Верхняя строка для всех заголовков UINavigation

В настоящее время я изменяю шрифт панели навигации, используя следующее в AppDelegate:

[[UINavigationBar appearance] setTitleTextAttributes:
 [NSDictionary dictionaryWithObjectsAndKeys:
  [UIFont fontWithName:@"..." size:...], NSFontAttributeName,
  nil]];

Есть ли способ сделать то же самое, чтобы убедиться, что строка капитализируется глобально?

Ответ 1

Вы можете создать базу UIViewController, которая скрывает исходную навигационную панель и добавляет новую.

self.navigationController.navigationBarHidden = YES;

UINavigationBar *navigationBar = [[UINavigationBar alloc] initWithFrame:frame];
UINavigationItem *naviItem = [[UINavigationItem alloc] init];
self.titleLabel = [UILabel new];
naviItem.titleView = self.titleLabel;
navigationBar.items = [NSArray arrayWithObjects:naviItem, nil];
[self.view addSubview:navigationBar];

Затем вы можете управлять настройкой заголовка для titleLabel.

Ответ 2

Это невозможно сделать с помощью NSAttributedString, но вместо этого вы можете изменить заголовок в вашем классе контроллера базового представления. Попробуй это:

/// Base class for all view controllers
class BaseViewController: UIViewController {

    private var firstWillAppearOccured = false

    override func viewWillAppear(_ animated: Bool) {
        super.viewWillAppear(animated)
        if !firstWillAppearOccured {
            viewWillFirstAppear(animated)
            firstWillAppearOccured = true
        }
    }

    /// Method is called when 'viewWillAppear(_:)' is called for the first time
    func viewWillFirstAppear(_ animated: Bool) {
        title = title?.uppercased() // Note that title is not available in viewDidLoad()
    }
}