显示mail-sms作曲家后状态栏下的iOS 7导航栏

时间:2014-01-11 15:40:22

标签: ios objective-c statusbar ios7-statusbar

将我的项目升级到iOS7后,我的视图显示在状态栏下。后来我通过将以下代码添加到DashBoardViewController(根导航控制器)viewdidAppear

来修复此问题
float systemVersion=[[[UIDevice currentDevice] systemVersion] floatValue];
if(systemVersion>=7.0f)
{
    CGRect tmpFrame = self.navigationController.view.frame;
    tmpFrame.origin.y = 20;
    self.navigationController.view.frame = tmpFrame;
}

但是在我的SettingsViewController中,当我提出模态视图来显示sms作曲家时,再次在状态栏下完成或取消该视图后。但是当回到DashBoardViewController视图恢复正常时。我不知道该怎么办。我希望我能解释一下这个问题。我的代码和屏幕截图如下。

- >截图: enter image description here

SettingViewController.m(显示短信撰写并完成撰写方法)

- (IBAction)act_shareSMS:(id)sender {

    MFMessageComposeViewController *controller = [[MFMessageComposeViewController alloc] init];
    NSString* message = @"adasdasd";
    controller.body =message;
    controller.messageComposeDelegate = self;

    if([NavigationManager sharedManager].contentNavigation)
        [[NavigationManager sharedManager].contentNavigation presentModalViewController:controller animated:YES];
}

- (void)messageComposeViewController:(MFMessageComposeViewController *)controller didFinishWithResult:(MessageComposeResult)result {

    [[NavigationManager sharedManager].contentNavigation dismissModalViewControllerAnimated:YES];

    if (result == MessageComposeResultCancelled) {
        NSLog(@"Message cancelled");
    } 
    else if (result == MessageComposeResultSent) {
       NSLog(@"Message sent");
    }
}

2 个答案:

答案 0 :(得分:0)

此更改是对iOS 7的预期更改,这可以帮助您处理它http://www.doubleencore.com/2013/09/developers-guide-to-the-ios-7-status-bar/

尝试在viewcontrollers子视图上使用iOS 6/7 delta来自动修复此问题

enter image description here

将delta Y设置为20,它会自动将其向下移动

答案 1 :(得分:0)

如果您支持io7的应用程序,那么我会请求您阅读此page并使用“edgesForExtendedLayout”的概念。这样你就不需要额外增加20px了。只需在if。

下使用“edgesForExtendedLayout”即可

看看这个example,你就可以了。不要在viewDidAppear中放置任何内容,而是将其移动到viewDidLoad。

希望这有帮助。