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

时间:2013-09-30 23:33:24

标签: ios7 mfmessagecomposeview

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

enter image description here

代码:

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

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

感谢。

2 个答案:

答案 0 :(得分:20)

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

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

    enter image description here

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

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

    enter image description here

答案 1 :(得分:20)

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

在展示你的留言作曲家([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];
}

多数人!!