调整 ModalViewController 的大小并将其定位在 iOS 7 的中心
Posted
技术标签:
【中文标题】调整 ModalViewController 的大小并将其定位在 iOS 7 的中心【英文标题】:Resize ModalViewController and position it at center in iOS 7 【发布时间】:2013-10-21 11:56:49 【问题描述】:我试图通过减小其宽度和高度来在 iPad 上显示 modalView,但问题是它没有居中对齐。在 ios 6 中它曾经可以正常工作,但在 iOS 7 中它不是居中对齐的。
下面是我的代码:
m_helpQA = [[HelpQAViewController alloc]init];
m_helpQA.modalPresentationStyle = UIModalPresentationFormSheet;
[self presentViewController:m_helpQA animated:YES completion:NULL];
m_helpQA.view.superview.bounds = CGRectMake(0, 0, 350, 250);//Dimensions of ModalView.
目前我是这样理解的
【问题讨论】:
【参考方案1】:对于 iOS 7 试试这个:
[self.navigationController presentViewController:navigationController animated:YES completion:^
//Make the modal bigger than normal
navigationController.view.superview.bounds = CGRectMake(0, 0, 700, 650);
];
动画看起来很难看,所以我建议添加一个动画来改进它:
[self.navigationController presentViewController:navigationController animated:YES completion:^
[UIView animateWithDuration:0.3 delay:0 options:UIViewAnimationOptionCurveEaseIn animations:^
//Make the modal bigger than normal
navigationController.view.superview.bounds = CGRectMake(0, 0, 700, 650);
completion:^(BOOL finished)
];
];
还请记住,您需要在 viewDidAppear 中设置 navigationControllers 视图的框架,以使内容的大小正确。
【讨论】:
这个问题最初是针对 iOS7 提出的,关于大小,但我发现它对位置 (frame.origin) 也很有用。但是,至少对于位置而言,这不再适用于 iOS8。任何想法>【参考方案2】:您需要将框架居中,这样应该可以工作(我还没有测试过)。
CGRect appFrame = [UIScreen mainScreen].applicationFrame;
CGRect modalFrame = m_helpQA.view.superview.frame;
modalFrame.size = CGSizeMake(350.f, 250.f);
modalFrame.origin.x = appFrame.size.width/2.0f - modalFrame.size.width/2.0f;
modalFrame.origin.y = appFrame.size.height/2.0f - modalFrame.size.height/2.0f;
m_helpQA.view.superview.frame = modalFrame;
更新代码以纠正错字
【讨论】:
嘿,我试过了,它在中心,但我无法降低 modalView 的高度。【参考方案3】:尝试以下方法:
UIViewController *vc = [[UIViewController alloc] initWithNibName:nil bundle:nil];
...
[self presentViewController:vc animated:NO completion:^
vc.view.superview.center = self.view.window.center;
];
// resize modal view
infoModalViewController.view.superview.bounds = CGRectMake(0, 0, newWidth, newHeight);
我必须在完成块中设置中心(在本例中为窗口的中心,但您也可以使用父视图控制器的中心)以使其正常工作。切换到animation:No
,否则它会看起来很丑:-)
【讨论】:
以上是关于调整 ModalViewController 的大小并将其定位在 iOS 7 的中心的主要内容,如果未能解决你的问题,请参考以下文章
从另一个 modalviewcontroller 关闭 modalviewcontroller
从另一个 modalviewcontroller 呈现 ModalViewcontroller