MFMessageComposeViewController的收件人字段未在iOS 7中显示

XJo*_*nes 22 mfmessagecomposeviewcontroller ios7

以下代码在iOS 5/6中运行良好.在iOS 7中,它看起来像这样(红色椭圆形用于强调).

在此输入图像描述

码:

if ([MFMessageComposeViewController canSendText]) {
    self.messageComposer = [MFMessageComposeViewController new];
    self.messageComposer.recipients = @[number];
    self.messageComposer.messageComposeDelegate = self;
    [self presentViewController:self.messageComposer
                       animated:YES
                     completion:nil];
}
Run Code Online (Sandbox Code Playgroud)

问题:这是简单的代码.是否有一些其他外部属性,可能是呈现视图控制器,正在影响这个?任何人都有修复或解决方法?

谢谢.

Gre*_*reg 20

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

  1. 创建一个空的自定义UINavigationController子类,它不会覆盖任何UINavigationController的方法.
  2. 通过在IB中的身份检查器上设置自定义类,将此自定义UINavigationController子类用作我想要具有自定义外观的任何导航控制器的标记:

    在此输入图像描述

  3. 在我的app delegate中,设置导航栏的外观如下:

    [[UINavigationBar appearanceWhenContainedIn:[MyCustomNavigationController class], nil] ...];
    
    Run Code Online (Sandbox Code Playgroud)

这确保我在想要自定义的控制器中获得我想要的导航栏外观,但保留了其他控制器(如MFMessageComposeViewController)中的标准导航栏(和相关)外观.这是一个截图; 注意MFMessageComposeViewController的标准外观,后台弹出窗口上的自定义导航栏外观:

在此输入图像描述


Bha*_*rat 20

我遇到同样的问题,这是我的解决方案 -

在演示你的消息之前,composer([self presentViewController:messageComposer animated:YES completion:nil];)设置

[[UINavigationBar appearance] 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];
}
Run Code Online (Sandbox Code Playgroud)

就这样!!

  • 这可以快速简单地解决 - 只需确保在初始化/分配MFMessageComposeViewController之前添加[UINavigationBar外观]代码片段 (13认同)