gpt4 book ai didi

iphone - 解雇ModalViewControllerAnimated后,父 View 设置为全屏

转载 作者:行者123 更新时间:2023-12-03 19:03:31 25 4
gpt4 key购买 nike

每次关闭 ModalViewController 后,父 View 都会设置为全屏。为什么?

Before                After
+----------------+ +------------------+
|head | | detailview |
+----------------+ | |
|detailview | | |
| | | |
| | | |
| | | |
+----------------+ +------------------+

我创建了一个出现错误的“简单”示例项目。

<强> http://github.com/rphl/modalTest

请看一下。

最佳答案

这在某种程度上是一种猜测,但在稍微研究一下您的代码后,这是一个有根据的猜测。

当您呈现模态视图时,它会被添加为属于调用 presentModalViewController 的 Controller 的 View 的 subview 。由于模态视图旨在全屏显示,因此看起来好像 super View 的框架在内部全屏显示。

我将以下内容放入您的 MyDetailViewController 中:

- (void)viewDidLoad {
[super viewDidLoad];
CGRect frame = self.navigationController.view.frame;
NSLog(@"%@", NSStringFromCGRect(frame));
}

- (void)viewDidAppear:(BOOL)animated {
[super viewDidAppear:animated];
CGRect frame = self.navigationController.view.frame;
NSLog(@"%@", NSStringFromCGRect(frame));
}

这导致了以下输出:

2010-09-19 00:23:51.823 ModalTest[2478:207] {{0, 164}, {320, 316}}
2010-09-19 00:23:56.178 ModalTest[2478:207] {{0, 0}, {320, 480}}

当详细信息第一次出现时,输出第一行。当模态视图关闭时输出第二行。

现在我实际上并不特别喜欢我找到的解决方案,但这具有预期的效果。在您的 sendMail 方法中:

ModalTestAppDelegate* appDelegate = [[UIApplication sharedApplication] delegate];
[appDelegate.viewController presentModalViewController:controller animated:YES];

并在您的 mailComposeController:didFinishWithResulterror: 方法中:

ModalTestAppDelegate* appDelegate = [[UIApplication sharedApplication] delegate];
[appDelegate.viewController dismissModalViewControllerAnimated:YES];

基本上,这可以确保全屏 View 包含呈现全屏模态视图的应用程序的主 UI。然而,我认为这并不理想,因为我不太喜欢像这样深入到应用程序委托(delegate)中的代码的深层部分。

关于iphone - 解雇ModalViewControllerAnimated后,父 View 设置为全屏,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3735528/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com