无法在横向中定位模态框架,但在纵向中可以
Posted
技术标签:
【中文标题】无法在横向中定位模态框架,但在纵向中可以【英文标题】:Can't position a modal frame in landscape but okay in portrait 【发布时间】:2013-11-11 23:46:58 【问题描述】:我有一个试图以模态方式呈现的视图控制器。我需要将其移动到屏幕上的特定位置。下面的代码在纵向上可以正常工作,但在横向上,无论我将中心设置在哪一点,视图都不会重新定位。如果我使用 pcvc.landscapeView.center 而不是 pcvc.landscapeView 视图会重新定位,但灰色框仍保留在视图的原始位置,并且我无法与视图交互。
在横向时,我需要如何区别对待视图控制器?
PostCommentViewController *pcvc = [[PostCommentViewController alloc] initWithNibName:@"PostCommentViewController" bundle:nil];
pcvc.modalTransitionStyle = UIModalTransitionStyleCrossDissolve;
pcvc.modalPresentationStyle = UIModalPresentationFormSheet;
[self presentViewController:(UIViewController *)pcvc animated:YES completion:nil];
if (UIInterfaceOrientationIsPortrait(self.interfaceOrientation))
pcvc.portraitView.superview.frame = CGRectMake(0, 0, 750, 143);
pcvc.portraitView.superview.center = CGPointMake(384, 680);
else
pcvc.landscapeView.superview.frame = CGRectMake(0, 0, 683, 300);
pcvc.landscapeView.superview.center = CGPointMake(500, 60);
【问题讨论】:
为什么要使用 2 个视图? 它们是不同的布局但执行相同的功能,这是必要的。 【参考方案1】:这小段代码我真的无能为力。
您正在加载名为 PostCommentViewController
的 xib 文件
该 xib 文件有 2 个视图 portraitView
和 landscapeView
并且您尝试移动超级视图,以便包含 portraitView
和 landscapeView
的视图。
我不明白,但作为一个快速修复,你可以为不同的布局制作不同的 xib。 同样,我没有您的视图控制器层次结构,因此很难提供帮助。
在 didrotate 中调用它
-(void)changeOrientation
UIDeviceOrientation orientation = [UIDevice currentDevice].orientation;
if (orientation == UIDeviceOrientationPortrait || orientation == UIDeviceOrientationPortraitUpsideDown)
[[NSBundle mainBundle] loadNibNamed:@"Portrait" owner:self options:nil];
else
[[NSBundle mainBundle] loadNibNamed:@"Landscape" owner:self options:nil];
【讨论】:
以上是关于无法在横向中定位模态框架,但在纵向中可以的主要内容,如果未能解决你的问题,请参考以下文章