presentViewControl视图大小控制真奇葩

现在在做一个项目,需要使用presentViewControl函数显示一个视图控制器,主要用于用户选择分享方式。

代码如下:

ShareViewController *svc = [[ShareViewController alloc] init];
svc.modalPresentationStyle = UIModalPresentationFromSheet;
[self presentViewController:svc animated:YES completion:nil];
svc.preferredContentSize = CGSizeMake(320, 500);

使用ios8的sdk编译,然后运行在ipad2(8.1)模拟器上没问题。可以控制弹出视图窗口的大小,并且带动画效果、居中显示。

presentViewControl视图大小控制真奇葩_第1张图片

但是运行在Ipad2(7.1)模拟器上效果就不一样了,视图大小完全不对。

presentViewControl视图大小控制真奇葩_第2张图片

在网上查了好多资料,说应该将

svc.preferredContentSize = CGSizeMake(320, 500);
修改成

svc.view.superview.frame = CGRectMake(0, 0, 320, 500);
这样才能适合IOS7的设备,改完之后发现视图大小是没问题了,但不居中显示了。

presentViewControl视图大小控制真奇葩_第3张图片

继续在网上找资料,说还得加一句代码设置视图的中心点

svc.view.superview.center = CGPointMake(1024/2, 768/2);
加完之后效果与没添加的效果一样,还是不居中。

最后将居中代码添加到presentViewController的completion中,代码如下:

[self presentViewController:svc animated:YES completion:^(void){
 svc.view.superview.center = CGPointMake(1024.0/2, 768.0/2);
}];

修改代码后,效果就非常搞笑啦,先是动画弹出一个视图,如上图所示不居中的。

待动画结束后,突然视图跳到中间去了,我都疯啦~

由于动画太难看了,无奈把动画去掉吧,修改代码如下:

[self presentViewController:svc animated:NO completion:^(void){
 svc.view.superview.center = CGPointMake(1024.0/2, 768.0/2);
}];

看下图的显示效果,视图都偏移到哪里去了?!

presentViewControl视图大小控制真奇葩_第4张图片

就修改了一个是否显示动画的参数,位置就完全变了。丧心病狂的我在无奈下,又将居中代码移到下面去了。

[self presentViewController:svc animated:NO completion:nil];
svc.view.superview.frame = CGRectMake(0, 0, 320, 500);
svc.view.superview.center = CGPointMake(1024.0/2, 768.0/2);

修改效果正确了,唯一的缺点就是动画没了。


好了,效果都实现了,算算时间从开始编码到查资料,再到修改共花费4个小时。

o(︶︿︶)o 唉,时间就这么浪费了!到现在我也没搞明白为啥苹果修改得差距这么大。


你可能感兴趣的:(presentViewControl视图大小控制真奇葩)