Rap*_*ael 4 iphone cocoa-touch uikit
每次关闭ModalViewController后,父视图都设置为全屏.为什么?
Before After
+----------------+ +------------------+
|head | | detailview |
+----------------+ | |
|detailview | | |
| | | |
| | | |
| | | |
+----------------+ +------------------+
Run Code Online (Sandbox Code Playgroud)
我创建了一个"简单"的示例项目,出现错误.
http://github.com/rphl/modalTest
请看一下.
这有点猜测,但是在稍微使用了你的代码后,这是一个有根据的猜测.
当您呈现模态视图时,它将被添加为属于presentModalViewController被调用的控制器的视图的子视图.由于模态视图旨在全屏显示,因此看起来好像内部超视图的框架是全屏显示的.
我把以下内容放在你的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));
}
Run Code Online (Sandbox Code Playgroud)
这导致以下输出:
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}}
Run Code Online (Sandbox Code Playgroud)
第一行是在细节首次出现时输出的.当模态视图被解除时输出第二行.
现在我实际上并不特别喜欢我找到的解决方案,但这会产生预期的效果.在你的sendMail方法中:
ModalTestAppDelegate* appDelegate = [[UIApplication sharedApplication] delegate];
[appDelegate.viewController presentModalViewController:controller animated:YES];
Run Code Online (Sandbox Code Playgroud)
在你的mailComposeController:didFinishWithResulterror:方法中:
ModalTestAppDelegate* appDelegate = [[UIApplication sharedApplication] delegate];
[appDelegate.viewController dismissModalViewControllerAnimated:YES];
Run Code Online (Sandbox Code Playgroud)
基本上这可以确保它是全屏幕视图,保持应用程序的主UI呈现全屏模式视图.我不认为这是理想的,因为我并不是代码的深层部分的忠实粉丝.
小智 5
对我有用的东西是在模态视图控制器被关闭后恢复帧.代码示例:
[self presentModalViewController:self.modalViewController animated:YES];
Run Code Online (Sandbox Code Playgroud)
CGRect frame = self.view.frame;
[self.modalViewController dismissModalViewControllerAnimated:YES];
self.view.frame = frame;
Run Code Online (Sandbox Code Playgroud)