iOS9 MFMailComposeViewController的NavigationBar中的自定义字体?

时间:2016-06-30 16:43:25

标签: ios objective-c swift ios9 mfmailcomposeviewcontroller

好吧,这就是我到目前为止所做的:

enter image description here

你可以在这里注意到我设法改变字体大小所以这很好,但我想要的风格还包括一个自定义字体。

  

请注意,实际样式会显示片刻,然后当状态栏更改为黑色字体时,自定义字体会丢失。

以下是我在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的相关

4 个答案:

答案 0 :(得分:3)

代码没有问题。当它适用于EKEventEditViewController的实例时,这是完全合理的,并且它不适用于MFMailComposeViewController的实例

如何进一步调查?

  • 也许尝试在不同版本的iOS上运行。如果你的申请 支持iOS8或更低版本,试着看看它是否有效。那样你 可以确定它是否是iOS9特定的问题。

  • 如果你有Xcode8测试版,你应该能够看到它是否在iOS10中得到修复。

iOS9上仍存在问题。在这种情况下,您需要在此处寻找替代方案。您可能已完全检查过UINavigationBar API,我建议您先查看UINavigationItem API。它会公开titleView属性,让您了解它的外观。

var titleView: UIView?
  

如果此属性值为nil,则当接收者为顶部项目时,导航项的标题将显示在导航栏的中心。如果将此属性设置为自定义标题,则会显示该属性而不是标题。

     

自定义视图可以包含按钮。使用buttonWithType:方法   UIButton类以自定义视图的样式添加按钮   导航栏。自定义标题视图以导航栏为中心   并且可以调整大小以适应。

     

默认值为nil。

典型用例 -

self.navigationItem.titleView = myCustomTitleView

优势: -

开启更多可能性。除了为UINavigationBar

提供的有限自定义端点之外

我需要你验证这是否有效。我还没有尝试过。

希望它有所帮助。

答案 1 :(得分:0)

在旧文档中,这里明确指出您不得更改Apple提供的界面。

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

  

重要提示:邮件撰写界面本身不可自定义   并且不得被您的申请修改。另外,之后   提供界面,不允许您的申请   进一步更改电子邮件内容。用户仍然可以编辑   使用界面的内容,但忽略程序化更改。   因此,您必须在呈现之前设置内容字段的值   接口

答案 2 :(得分:0)

Apple的框架可能使用外观apis本身,你尝试过更具体的外观'选择器',例如:

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

答案 3 :(得分:-1)

UIFont()是一个可用的初始化程序,它可能由于多种原因而失败。

有些人说不要强制打开并单独初始化并检查是否成功:

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

您是否尝试过单独初始化?