presentViewControl视图大小控制真奇葩

本文记录了在iOS开发过程中遇到的一个关于视图适配的问题,主要是在不同iOS版本(iOS7与iOS8)间使用presentViewController方法显示视图控制器时出现的显示问题及解决过程。

现在在做一个项目,需要使用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);
修改效果正确了,唯一的缺点就是动画没了。


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

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


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值