现在在做一个项目,需要使用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)模拟器上没问题。可以控制弹出视图窗口的大小,并且带动画效果、居中显示。
但是运行在Ipad2(7.1)模拟器上效果就不一样了,视图大小完全不对。
在网上查了好多资料,说应该将
svc.preferredContentSize = CGSizeMake(320, 500);修改成
svc.view.superview.frame = CGRectMake(0, 0, 320, 500);这样才能适合IOS7的设备,改完之后发现视图大小是没问题了,但不居中显示了。
继续在网上找资料,说还得加一句代码设置视图的中心点
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); }];看下图的显示效果,视图都偏移到哪里去了?!
就修改了一个是否显示动画的参数,位置就完全变了。丧心病狂的我在无奈下,又将居中代码移到下面去了。
[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);修改效果正确了,唯一的缺点就是动画没了。
o(︶︿︶)o 唉,时间就这么浪费了!到现在我也没搞明白为啥苹果修改得差距这么大。