CollectionView 约束打破

Posted

技术标签:

【中文标题】CollectionView 约束打破【英文标题】:CollectionView Constraints breaking 【发布时间】:2019-10-17 09:23:33 【问题描述】:

我有一个collectionView,每个单元格都包含一个tableView。灰色部分应该是collectionView。

但是当我运行应用程序时,我会得到类似 的信息

您可以清楚地看到当前的表格视图并没有遵守约束集。我从控制台收到以下错误。

The behavior of the UICollectionViewFlowLayout is not defined because:
the item height must be less than the height of the UICollectionView minus the section insets top and

bottom values, minus the content insets top and bottom values.
The relevant UICollectionViewFlowLayout instance is <UICollectionViewFlowLayout: 0x7f80fd28e420>, and it 

is attached to <UICollectionView: 0x7f80fc08f800; frame = (0 114; 375 664); clipsToBounds = YES;
autoresize = RM+BM; gestureRecognizers = <NSArray: 0x600000d6c4b0>; layer = <CALayer: 0x6000003beee0>;
contentOffset: 0, 0; contentSize: 0, 0; adjustedContentInset: 0, 0, 0, 0;

layout: <UICollectionViewFlowLayout: 0x7f80fd28e420>; dataSource: <BizTiz.EventDetailController: 0x7f80fa0b7800>>.

Make a symbolic breakpoint at UICollectionViewFlowLayoutBreakForInvalidSizes to catch this in the debugger.

我该如何解决这个问题?此外,当我将此 collectionView 推送到堆栈上时,会有一个小的滞后。我猜这可能是由于之前的错误造成的。

【问题讨论】:

您是否从情节提要(框架检查器选项卡)中删除了默认昆虫? 错误清楚地表明您的 tableView 大小大于您返回的 collectionView 高度方法。交叉检查这些高度。 你的tableView的约束是怎么定义的?你能分享更多细节吗?此外,您希望您的 collectionView 单元格具有固定高度还是根据 tableView 的高度来改变其高度?获得这些信息后,我们会尽力为您提供帮助。 【参考方案1】:

请在 UICollectionViewDelegateFlowLayout 中设置布局。

   func collectionView(_ collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, sizeForItemAt indexPath: IndexPath) -> CGSize 
        return CGSize(width: <cell_width>, height: <cell_height>)
    

【讨论】:

【参考方案2】:

意识到我的错误......

   func collectionView(_ collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, sizeForItemAt indexPath: IndexPath) -> CGSize 
        return CGSize(width: view.frame.width, height: view.frame.height - 114)
    

我将高度设置为view.frame.height。我忘了减去顶部的额外高度。

【讨论】:

您也可以将其设置为 collectionView.frame.height。

以上是关于CollectionView 约束打破的主要内容,如果未能解决你的问题,请参考以下文章

隐藏stackView时打破约束

collectionview 单元格动态宽度打破布局

CollectionView 单元格转场

Collectionview 的底部约束未在运行时更新

打破父约束的子视图约束

自动布局约束警告“将尝试通过打破约束来恢复”