UICollectionView宽于NavigationController问题排查求助
嘿,这个嵌套布局的坑我在Storyboard里踩过好几次!你遇到的问题大概率是几个默认设置在多层嵌套时出了冲突,下面是几个可以快速排查的方向:
检查UICollectionViewController的Size Class设置
默认情况下,UICollectionViewController可能会继承全局的Size Class配置(比如iPad的Regular Width/Regular Height),导致它的CollectionView默认采用屏幕原始宽度(1024),而非父容器NavigationController的宽度。你可以在Storyboard中选中UICollectionViewController,打开Attributes Inspector,把Size Class改成Any/Any,或者确保它的Size Class和ContainerView所在的ViewController完全一致,让布局规则统一。确认CollectionView的Autoresizing Mask配置
选中UICollectionViewController场景里的CollectionView,打开Size Inspector查看Autoresizing Mask选项。务必勾选Flexible Width和Flexible Height的弹簧(也就是宽度方向的左右箭头、高度方向的上下箭头都处于激活状态),这样CollectionView才会自动跟随父视图(NavigationController的view)的尺寸变化。如果这个设置没开,它会一直保持初始的固定宽度。关闭Adjust Scroll View Insets选项
找到ContainerView所在的ViewController,打开Attributes Inspector,看看是否勾选了Adjust Scroll View Insets。这个选项默认是开启的,在嵌套ScrollView(包括CollectionView)的布局中,有时候会干扰自动布局计算,导致尺寸异常。尝试关掉这个选项,再观察宽度是否恢复正常。排查隐性固定宽度约束
虽然你说没手动设置约束,但Storyboard偶尔会自动生成隐性的固定宽度约束。你可以在UICollectionViewController的Document Outline里,查看CollectionView的约束列表,如果发现有固定宽度为1024的约束,直接删除它,让CollectionView依赖父视图尺寸自适应。
按照这几个步骤排查下来,应该就能解决宽度不匹配的问题了。
内容的提问来源于stack exchange,提问作者crazyhor77

