解散iPad模态视图弄乱了Uisplitview面板
-
02-10-2019 - |
题
前提非常简单:我想在使用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单元格时。尽管根视图在弹出窗口中(可能是一个足够的错误来源),但一切都很好。
我已经尝试过的一些事情,没有成功:
- 转储标签栏,只需显示tableviewController1作为拆分视图的根控制器
- 创建一个委托协议,以便parent tableviewController1删除模态视图,而不是mymodalclass视图本身。
- 在tableViewController1.splitviewController上呈现/删除模态视图实际上使情况变得更糟:视图甚至没有出现。
- 牺牲几只山羊也无济于事。
我将非常感谢有关此问题的任何意见。
解决方案
我对自己的问题有一种回答:我使用仪器系统地消除了应用程序中的所有内存泄漏。一旦我这样做,问题就消失了。
其他提示
我遇到了与您相同的问题,我通过在程序上暂时强制旋转我的呈现controller(一旦返回到它)来解决它,并以其ViewDidappear方法进行一些任意旋转。当然没有动画。然后将其旋转回想要的方向(我在旋转之前保存了)。
因此,如果VC1模仿显示VC2,并且用户旋转VC2,则通过调用:UIinterFaceorientation Currentation currentIrientation = self.inter.inter.inter.inter.interfaceorientation; //存储VC2的当前方向(模态视图)[VC1 WillRotateToInterfaceorientation:CurrentIrientation持续时间: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.
}