最近开发遇到的AutoResizing坑

2019-08-12  本文已影响0人  0200a9609930

由于博客地址无效, 故把之前的博文转来简书
转自2017-02-26

image

在模仿斗鱼开发首页的时候,我的页面层次是这样的:
1.最底层的是个UIViewController

2.然后自己封装了一个TitleView和ContentView加在self.view上

3.ContentView里面是个UICollectionView,随着TitleView的点击,UICollectionView要滑动到所对应的模块去,当然UICollectionView也可以自己滑动

4.然后创建对应的控制器UIViewController,在UICollectionView的DataSource里加入到cell中

let vc = subVcs[indexPath.item]
vc.view.frame = cell.contentView.bounds
cell.contentView.addSubview(vc.view)

首先,说下我遇到的第一个坑

1.在把UIViewController的view加入到cell.contentView中的时候,我忘记设置frame了

vc.view.frame = cell.contentView.bounds

这导致我在对应的模块的UIController中,添加的View大小一直有问题

image

如图所示,就是我的推荐的Controller,底部一直不能显示完整,推荐这个页面其实是个CollectionView,我在添加CollectionView的时候,frame = self.view.bounds

image

通过打印得到self.view.frame = { {0, 0}, {320, 568} },其实ContentView的大小没有这么大,这个时候再去看添加controller.view的时候发现没给设置大小.
把frame添加了运行还是出现问题,这个时候要设置当前UICollectionView的大小随着父视图的大小变化而变化.

collectionView.autoresizingMask = [.flexibleHeight, .flexibleWidth]

第二个坑又来了

当我发现底部能完全显示后,我的两个headerView消失了

image

头部是两个UIView,分别加在CollectionView上,然后设置的contentInset.

image

调试的第一步,先看层次结构图,如下

image image image image

发现两个view都变成了一条线,高度被压缩了.这个时候想起设置了这两个view的父视图,也就是我之前设置的CollectionView的大小会被拉伸或压缩.这样,就导致加在CollectionView上的视图也会跟随着变化.

image image image
通过代码或者在xib里都可以设置,让view保持原来的大小!

总结

问题主要出在对AutoResizing和AutoLayout不了解,推荐一个简单的博客,介绍了两者.
子视图要不要跟随父视图的变化而变化,这个就要看具体情况.记得要设置好AutoResizing.
http://www.jianshu.com/p/3c0698c22d85

模仿斗鱼的项目地址:
https://github.com/yangyu2010

上一篇 下一篇

猜你喜欢

热点阅读