UICollectionView布局问题

Nit*_*esh 61 ios uicollectionview uicollectionviewlayout

我正在使用UICollectionView流程布局.我也为此做了一个习惯UICollectionViewCell.但是在运行项目时,控制台继续抛出这个错误 -

UICollectionView未定义的行为是因为:项目高度必须小于UICollectionViewCell减去该部分高度的顶部和底部值.

我确保细胞的大小是正确的

有没有人能够解决这个问题.提前致谢.

关心Nitesh

小智 38

我发现,使用storyboards,你必须进入storyboard并点击整体View Controller(视图应以蓝色突出显示)并转到Attributes Inspector(屏幕右侧的第四个标签)并取消选中"Under Top Bars" ,"Under Bottom Bars"和"Under Opaque Bars".这为我解决了这个问题,它也为我的同事清除了它.

  • 代码中的等价物是什么? (8认同)
  • 我发现取消选中“调整滚动视图插入”删除了警告。(使用故事板,单元格中的自动布局) (3认同)

nin*_*eer 29

当使用集合视图呈现全屏视图控制器时,我遇到了一些问题.

基本上在运行时,它会询问项目的大小,并简单地返回集合视图的大小:

-(CGSize)collectionView:(UICollectionView *)collectionView layout:(UICollectionViewLayout *)collectionViewLayout sizeForItemAtIndexPath:(NSIndexPath *)indexPath {
    return self.collectionView.frame.size;
}
Run Code Online (Sandbox Code Playgroud)

  • 如果你想支持轮换,这比我的回答要好 (4认同)

Saj*_*jon 26

我知道这是一个非常晚的回复,但我也经历过这个.

在我的视图控制器中,让我们称它为MyViewController我有一个UICollectionView使用自定义UICollectionViewCells.我正在实现方法collectionView:layout:sizeForItemAtIndexPath我返回的项目大小取决于高度UICollectionView.

MyViewController是在故事板中使用autolayout来控制的高度UIViewController.

在纵向模式下,单元格看起来很好,但在横向模式下则没有.

我通过无效的解决我的问题,UICollectionViewLayout我的UICollectionView内部viewWillLayoutSubviews方法.

- (void)viewWillLayoutSubviews {
    [self.myCollectionView.collectionViewLayout invalidateLayout];
}
Run Code Online (Sandbox Code Playgroud)

早些时候我曾尝试使布局无效willAnimateRotationToInterfaceOrientation:duration,但它没有用.原因可能是所有视图的大小尚未计算,所以我们必须等到自动布局完成它的魔力.我指的是这个SO线程.

Swift 4.0的更新:

  override func viewDidLayoutSubviews() {
    super.viewDidLayoutSubviews()
    self.myCollectionView.collectionViewLayout.invalidateLayout()
  }
Run Code Online (Sandbox Code Playgroud)


Jon*_*oke 18

尝试使用全屏单元格创建集合视图时,我自己有几次这个问题.我的问题是由于在IB /故事板中布置4"屏幕并指定320*568的项目大小,但在模拟器中使用3.5"屏幕运行,其高度为480.解决方案是指定您的项目大小代码类似于:

UICollectionViewFlowLayout *layout = (id) self.collectionView.collectionViewLayout;
layout.itemSize = self.collectionView.frame.size;
Run Code Online (Sandbox Code Playgroud)

这可确保在运行时正确设置单元格大小.

  • 为什么要将整个视图的大小分配给单个单元格的大小? (2认同)

Dar*_*koM 10

如果你正在使用故事板和自动布局,调试这类问题真的很难......

尝试在iPhone上显示UICollectionViewCell全屏时,我遇到了类似的问题.

大部分时间问题都与单元格的大小有关

-(CGSize)collectionView:(UICollectionView *)collectionView layout:(UICollectionViewLayout *)collectionViewLayout sizeForItemAtIndexPath:(NSIndexPath *)
Run Code Online (Sandbox Code Playgroud)

或直接在flowLayout.itemSize上.

但是......试试:

  1. 选择ViewController:

选择View Controller

  1. 然后取消选中Extend Edges选项:

禁用

现在尝试设置自动布局约束.

祝好运.