Ios7 MFMessageComposeViewController的收件人字段不存在';无法在iOS 7中显示

Ios7 MFMessageComposeViewController的收件人字段不存在';无法在iOS 7中显示,ios7,mfmessagecomposeview,Ios7,Mfmessagecomposeview,下面的代码在iOS 5/6中运行良好。在iOS 7中,它看起来像这样(红色椭圆形表示强调) 代码: 问题:这是一个简单的代码。是否有其他一些外部属性(可能是呈现视图控制器的属性)影响了这一点?有人有解决办法吗 谢谢。我发现MFMessageComposeViewController的收件人字段似乎从iOS7中的UINavigationBar外观代理中获取了一些外观。为了解决这个问题,我在我的应用程序中做了以下工作: 创建一个空的自定义UINavigationController子类,该子类不重

下面的代码在iOS 5/6中运行良好。在iOS 7中,它看起来像这样(红色椭圆形表示强调)

代码:

问题:这是一个简单的代码。是否有其他一些外部属性(可能是呈现视图控制器的属性)影响了这一点?有人有解决办法吗


谢谢。

我发现MFMessageComposeViewController的收件人字段似乎从iOS7中的UINavigationBar外观代理中获取了一些外观。为了解决这个问题,我在我的应用程序中做了以下工作:

  • 创建一个空的自定义UINavigationController子类,该子类不重写UINavigationController的任何方法

  • 通过在IB中的identity inspector上设置自定义类,将此自定义UINavigationController子类用作我希望具有自定义外观的任何导航控制器的标记:

  • 在my app delegate中,设置导航栏的外观,如下所示:

     [[UINavigationBar appearanceWhenContainedIn:[MyCustomNavigationController class], nil] ...];
    
  • 这可确保在要自定义的控制器中获得所需的导航栏外观,但在其他控制器(如MFMessageComposeViewController)中保留标准导航栏(及相关)外观。这是一个截图;请注意MFMessageComposeViewController的标准外观,以及背景中popover上的自定义导航栏外观:


    我也面临同样的问题,下面是我的解决方案-

    在演示您的消息生成器之前(
    [self-presentViewController:messageComposer动画:是完成:无];
    ) 设置

    [[UINavigationBar外观]setBackgroundImage:nil forBarMetrics:UIBarMetricsDefault]

    和在委托方法中

    - (void)messageComposeViewController:(MFMessageComposeViewController *)controller
                     didFinishWithResult:(MessageComposeResult)result {
         UIImage *backgroundImage = [UIImage imageNamed:@"Navigation Bar"];
        [[UINavigationBar appearance] setBackgroundImage:backgroundImage forBarMetrics:UIBarMetricsDefault];
        [self dismissViewControllerAnimated:YES completion:nil];
    }
    

    就这些

    那很容易。谢谢我已经在为
    UINavigationBar
    使用一个子类,因此我更改了外观设置,使其仅应用于此导航栏类
    ,即[MyNavBar外观]
    。这也解决了这个问题。奇妙的编写和解决方案-而且非常容易实现!这是一个快速而简单的解决方法-只需确保在初始化/分配MFMessageComposeViewController之前添加[UINavigationBar外观]代码段即可
    - (void)messageComposeViewController:(MFMessageComposeViewController *)controller
                     didFinishWithResult:(MessageComposeResult)result {
         UIImage *backgroundImage = [UIImage imageNamed:@"Navigation Bar"];
        [[UINavigationBar appearance] setBackgroundImage:backgroundImage forBarMetrics:UIBarMetricsDefault];
        [self dismissViewControllerAnimated:YES completion:nil];
    }