关闭 Modal ViewController 将父视图隐藏在状态栏后面

Posted

技术标签:

【中文标题】关闭 Modal ViewController 将父视图隐藏在状态栏后面【英文标题】:dismissModalViewController Hides the parent view behind status bar 【发布时间】:2012-06-23 05:11:45 【问题描述】:

我有一个非常奇怪的问题。我正在使用当前的模态视图控制器将我的 MFMailComposer ViewController 显示在放置在导航栏中的 ViewController 的顶部。

[self presentModalViewController:emailviewController animated:YES];

要隐藏,我用...

-(void) mailComposeController:(MFMailComposeViewController *)controller didFinishWithResult:(MFMailComposeResult)result error:(NSError *)error


    [self dismissModalViewControllerAnimated:YES];

一切正常,但是当我关闭 MailComposer 时,原始视图控制器隐藏在状态栏后面。

我尝试使用 setFrame 方法将视图偏移量修改为 10,但它不起作用。 (这在模态视图控制器呈现和关闭之前和之后很累)

我尝试过暂时隐藏状态栏,但没有成功。

我已经尝试过 self.navigationcontroller presentmodalviewcontrolle 但这也没有用...

任何想法或建议将不胜感激

edited : 大多数人给我一个建议来手动修改偏移量。 好吧,那是行不通的。因为如果我在原始 viewcontroller 方法的 viewDidLoad/viewWillapper 中这样做,那么它会在当前模态视图控制器之前移动我的视图,而在我加载模态视图控制器之后它会变得正常。

(void) viewDidAppear: (BOOL) 动画 CGRect 框架 = self.navigationController.view.frame; frame.origin.y = 20; self.navigationController.view.frame = 框架;

【问题讨论】:

您的原始视图控制器是否将状态栏设置为隐藏或否? nope .. 我还没碰过状态栏 所以在模态视图控制器和原始视图控制器中状态栏没有变化? 没有。状态栏保持在同一个位置,它是模态视图控制器更改后的视图控制器 好的。我的问题已解决,但我不知道如何解决。我的导航控制器最初由 self.navigationController setViewControllers: Array of View controller 初始化。在其中一个中,我通过发送 shouldAutorotateTo.... 来禁用自动旋转以返回 NO 而在其他中则为 YES 。我改变了那个以遵守其他人并且它起作用了。我不知道发生了什么,但是。我将模拟这个并为 Apple 提交一个错误,除非其他人可以帮助我弄清楚引擎盖下发生了什么 【参考方案1】:

尝试将其放入 ViewDidAppear:

[[UIApplication sharedApplication] setStatusBarStyle:UIStatusBarStyleDefault];

最坏的情况,如果它总是在模态视图控制器关闭后发生,请在 .h 中为 afterFirstLaunch 声明一个布尔值并将其放入 viewDidAppear:

if(afterFirstLaunch)
      CGRect frame = self.navigationController.view.frame;
      frame.origin.y = 20;
      self.navigationController.view.frame = frame;

else 
      afterFirstLaunch = true;
 

【讨论】:

如果这不起作用,发布代码可能会有所帮助。两个视图都是使用 Interface Builder 制作的吗?你是如何展示模态视图控制器的? 在我看来,在视图全部准备好后移动视图框架看起来会非常讨厌。视图应在出现之前正确定位。 这取决于您呈现视图的方式。如果它带有过渡动画,那么是的,它一开始会看起来很奇怪。但是,如果视图只是出现而没有任何动画,则差异将难以察觉。

以上是关于关闭 Modal ViewController 将父视图隐藏在状态栏后面的主要内容,如果未能解决你的问题,请参考以下文章

将 Modal UINavigationController 展开到另一个 ViewController

iOS Modal Segue 丢弃源 ViewController?

是否可以将当前的 Modal ViewController 设为 UINavigationController?

是否存在 Modal ViewController: 将视图控制器添加到堆栈中?

使用 Swift 3 将数据从 Modal Viewcontroller 传递到 rootController(不要 Segue)

Dismiss Modal ViewController Popup