UIScrollView(UITableView、UICollectionView)Autolayout横屏frame自动变动

描述下问题出现的场景
【1】 ViewControllerA 是竖屏的VC,VC中有一个CollectionView。ViewControllerB是横屏的VC。
【2】跳转方式为 present

通过- (void)scrollViewDidScroll:(UIScrollView *)scrollView查看到,当VCA跳转到VCB的时候,collection view的frame、contentSize、contentOffset都发生了变化

跳转前
content size—>414.000000,2406.000000

跳转到VCB后
content size—>736.000000,1898.000000


可以得出的结论,这次变化是由横屏引起的。

通过调查,我发现引起这个的原因是Autolayout的方式设置View的约束在屏幕变化的时候会引起Frame的变化,即使你当前的VC是只支持竖屏。

于是我首先用手动管理frame代替了Autolayout

self.collectionView.frame = CGRectMake(0, 0, SCREEN_WIDTH, SCREEN_HEIGHT - 40);

然后由于跳转VCB的时候又操作了status bar的隐藏,导致系统也会自动计算frame。

于是在VC中去掉了自动调整的部分

self.automaticallyAdjustsScrollViewInsets = NO;

最终frame变成:
self.collectionView.frame = CGRectMake(0, 64, SCREEN_WIDTH, SCREEN_HEIGHT - 40 - 64);


不过到此为止还是会有一点小问题,当VCA跳转VCB,status bar 被收起,页面还没完全跳转到VCB的时候,collection view 与 navigation bar 的中间会有20px的空白哦,暂时还没有解决,如果有同学解决了希望留言。

参考资料:
Autolayout is changing UIScrollView’s contentOffset on rotation

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值