为什么UICollectionView在单元格全屏时logging错误?
我有一个使用UICollectionViewFlowLayout
,其中我的itemSize
是itemSize
的大小。 基本上,这是每个单元格全屏并水平滚动的单元格的行布局。
在我的UICollectionViewFlowLayout
子类中,我重写了prepareLayout
,如下所示:
- (void)prepareLayout { self.itemSize = self.collectionView.frame.size; self.scrollDirection = UICollectionViewScrollDirectionHorizontal; self.collectionView.pagingEnabled = YES; self.minimumLineSpacing = 0.0; self.minimumInteritemSpacing = 0.0; self.sectionInset = UIEdgeInsetsZero; self.footerReferenceSize = CGSizeZero; self.headerReferenceSize = CGSizeZero; }
UICollectionViewController
是非常基本的在一个部分返回10个项目。 我已经在GitHub上包含了一个示例项目来获取更多细节。
一切似乎设置正确。 它在模拟器和设备上看起来是正确的,但是当收集视图显示时,会有一个错误logging到控制台:
the behavior of the UICollectionViewFlowLayout is not defined because: the item height must be less that the height of the UICollectionView minus the section insets top and bottom values.
还要注意,在我的例子中的集合视图控制器是在导航控制器中,虽然在示例中看起来并不是特别必要,但在我的实际情况下,我需要导航控制器中的集合视图。
UIViewController
上有一个属性 – automaticallyAdjustsScrollViewInsets
– 默认为YES
。 这意味着,当一个UIViewController
在其视图层次结构中具有一个UIScrollView
( UICollectionViewController
为真)时,该滚动视图的contentInset
属性会自动调整,以考虑状态栏,导航栏和工具栏或标签栏占用的屏幕区域。
该财产的文件指出:
automaticallyAdjustsScrollViewInsets
指定视图控制器是否应该自动调整其滚动视图插图。
@property(nonatomic, assign) BOOL automaticallyAdjustsScrollViewInsets
讨论
默认值为YES,允许视图控制器响应状态栏,导航栏和工具栏或选项卡栏所消耗的屏幕区域来调整其滚动视图插图。 如果您想自己pipe理滚动视图插入调整(例如视图层次结构中有多个滚动视图),请将其设置为NO。
解决方法是automaticallyAdjustsScrollViewInsets
设置UICollectionViewController
子类中的任何地方,例如在viewDidLoad
,将UICollectionViewController
设置为NO
:
- (void)viewDidLoad { [super viewDidLoad]; self.automaticallyAdjustsScrollViewInsets = NO; }
我已经在GitHub上放置了一个示例项目来说明这个问题和解决scheme。 有两个分支: with_error
和fixed_error
。 这是GitHub上的变化的差异 。
ios 10:最上面的视图没有连接到视图sockets
这个问题刚刚发生在我的3倍屏幕上(即iPhone 6 Plus)。事实certificate,自动布局引擎并不是真的喜欢无限的浮点值(比如.33333333),所以我的解决方法是将返回高度sizeForItemAt:indexPath:
return CGSize(width: preferredWidth, height: floor(preferredHeight))