前提非常简单:我想在使用UISplitViewController的iPad应用中显示模态视图。
视图层次结构很简单:
/- TableViewController1
/- root:TabBarController -- TableViewController2
SplitViewController -
\- detail:CustomViewController
当我点击TableViewController1中的一个表格单元格时,我打开一个模态视图:
- (void)tableView:(UITableView *)tv didSelectRowAtIndexPath:(NSIndexPath *)ip {
UIViewController *vc = [[MyModalClass alloc] init];
UINavigationController *nc = [[UINavigationController alloc]
initWithRootViewController:vc];
nc.modalPresentationStyle = UIModalPresentationFormSheet;
nc.modalTransitionStyle = UIModalTransitionStyleFlipHorizontal;
[self presentModalViewController:nc animated:true];
[nc release];
[vc release];
}
这很好用:视图出现。当我尝试以除横向以外的任何方向解除问题时,问题就开始了。
在ModalViewController中,导航栏中的UITabBarButton触发以下方法:
- (void) closeButtonInNavBarWasClicked:(id)sender {
[self dismissModalViewControllerAnimated:true];
}
这就是问题的起点。
调用此代码时,模态视图会消失,但是:TabBarController(拆分视图的根视图)会突然旋转并调整大小。内容突然侧身,部分覆盖细节视图。详细信息视图不会调整为较小,只是部分由根视图覆盖。
没有出现此问题的唯一情况是当应用程序处于纵向模式时点击TableViewController1单元格。尽管根视图是一个popover(可能是一个充足的bug来源),但一切正常。
我已尝试过的一些事情没有成功:
我非常感谢有关此问题的任何意见。
答案 0 :(得分:0)
我对自己的问题有一个简单的回答:我使用Instruments系统地消除了我的应用程序中的所有内存泄漏。一旦我这样做了,问题就消失了。
答案 1 :(得分:0)
我和你有同样的问题,我通过编程暂时强制旋转我的呈现viewController(一旦返回它),在其viewDidAppear方法中进行一些任意旋转。当然没有动画。然后将其旋转回所需的方向(我在旋转之前保存)。
因此,如果vc1以模态方式显示vc2,并且用户旋转vc2,我通过调用以下方法根据vc2的当前方向设置vc1的方向: UIInterfaceOrientation currentOrientation = self.interfaceOrientation; //存储vc2的当前方向(模态视图) [vc1 willRotateToInterfaceOrientation:currentOrientation duration:0];
然后我解除vc2并在vc1的viewWillAppear中执行此操作:
- (void)viewDidAppear:(BOOL)动画{
[super viewDidAppear:animated];
/* Store wanted orientation */
UIInterfaceOrientation currentOrientation = self.interfaceOrientation;
/* rotate to some arbitrary orientation, this solves the bug. */
[[UIDevice currentDevice] setOrientation:UIInterfaceOrientationPortraitUpsideDown animated:NO];
[[UIDevice currentDevice] setOrientation:currentOrientation animated:NO]; //restore wanted orientation.
}