Пользовательский шрифт в NavigationBar iOS9 MFMailComposeViewController?

Хорошо, это то, что у меня есть до сих пор:

введите описание изображения здесь

Как вы можете заметить, мне удалось изменить размер шрифта, так что это прекрасно, но стиль, который я хочу, также включает в себя собственный шрифт.

Обратите внимание, что фактический стиль отображается на мгновение, а затем, когда панель состояния изменяется на черный шрифт, пользовательский шрифт теряется.

Здесь код, который я использую в своем applicationDidFinish...

UIApplication.sharedApplication().statusBarStyle = UIStatusBarStyle.LightContent

UINavigationBar.appearance().titleTextAttributes = [
     NSFontAttributeName: UIFont(name: "<MyCustomFont>", size: 32)!,
     NSForegroundColorAttributeName : UIColor.whiteColor(),
    ]

UINavigationBar.appearance().tintColor = UIColor.whiteColor()
UINavigationBar.appearance().opaque = true
UINavigationBar.appearance().barStyle = UIBarStyle.Black
UINavigationBar.appearance().barTintColor = UIColor.BlueColor()

UIBarButtonItem.appearance().tintColor = UIColor.whiteColor()

UIBarButtonItem.appearance().setTitleTextAttributes([
     NSFontAttributeName: UIFont(name: "<MyCustomFont>", size: 18)!,
     NSForegroundColorAttributeName : UIColor.whiteColor(),
    ], forState: UIControlState.Normal)

Примечание:

У меня есть экземпляр EKEventEditViewController на месте, и стиль применяется правильно.

Проблема связана с MailComposer

Ответ 1

В коде нет ничего плохого. Это полностью оправдано, если оно работает для экземпляров EKEventEditViewController и не работает для экземпляров MFMailComposeViewController

Как исследовать это дальше?

  • Возможно, попробуйте запустить разные версии iOS. Если ваша заявка поддерживает iOS8 или ниже, попробуйте посмотреть, работает ли он там. Таким образом, вы может убедиться, что это конкретная проблема iOS9 или нет.

  • Если у вас есть Xcode8 beta, вы сможете увидеть, исправлено ли это в iOS10 или нет.

Проблема все еще существует на iOS9. В этом случае вам нужно искать альтернативы здесь. Возможно, вы полностью проверили API UINavigationBar, я бы рекомендовал взглянуть на API UINavigationItem. Он предоставляет свойство titleView, оставляя его для вас, как вы хотите, чтобы он выглядел.

var titleView: UIView?

Если это значение свойства равно nil, заголовок навигационных элементов отображается в центре панели навигации, когда приемник является верхним элементом. Если вы установите это свойство в пользовательский заголовок, он будет отображаться вместо названия.

Пользовательские представления могут содержать кнопки. Используйте метод buttonWithType: Класс UIButton для добавления кнопок в пользовательский вид в стиле Панель навигации. Пользовательские названия в центре расположены на панели навигации и может быть изменен по размеру.

Значение по умолчанию - nil.

Типичный вариант использования -

self.navigationItem.titleView = myCustomTitleView

Преимущество: -

Открывает больше возможностей. Помимо ограниченных конечных точек настройки для UINavigationBar

Мне нужно, чтобы вы проверили, работает ли это. Я еще не пробовал.

Надеюсь, что это поможет.

Ответ 2

В старой документации было четко указано, что вы НЕ ДОЛЖНЫ изменять интерфейс, предоставляемый Apple.

http://developer.apple.com/library/ios/#documentation/MessageUI/Reference/MFMailComposeViewController_class/Reference/Reference.html

Важно: сам интерфейс композиции почты не настраивается и не должны быть изменены вашим приложением. Кроме того, после представляя интерфейс, ваше приложение не разрешено делать дальнейшие изменения содержимого электронной почты. Пользователь может редактировать содержимое с использованием интерфейса, но программные изменения игнорируются. Таким образом, вы должны установить значения полей содержимого перед представлением интерфейс.

Ответ 3

Apple framework, вероятно, использует внешний вид apis, попробовал ли вы более конкретный вид "селектор", например:

UIBarButtonItem.appearanceWhenContainedInInstancesOfClasses([MFMailComposeViewController.self, UINavigationBar.self])

Ответ 4

UIFont() является неудачным инициализатором, он может завершиться неудачей по многим причинам.

Некоторые люди говорят не форсировать разворот и инициализировать его отдельно и проверять успех:

`if let font = UIFont(name: "customFont.ttf", size: 21) {
UINavigationBar.appearance().titleTextAttributes =  [NSFontAttributeName: font]
}`

Вы пытались инициализировать его отдельно?