Пользовательский шрифт в 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]
}`
Вы пытались инициализировать его отдельно?