【问题标题】:UICollectionView Update Cellsizes after changing constraintsUICollectionView 更改约束后更新 Cellsizes
【发布时间】:2016-03-02 17:35:07
【问题描述】:

我正在使用自动布局来确定单元格大小(固定为可变高度)并在情节提要中设置所有必要的约束。只要我不更改约束,自动布局就可以正常工作。

但在运行时我必须向某些单元格添加按钮。我删除最后一个标签的底部约束,插入按钮并向上面的标签添加一个约束,一个前导约束到单元格,一个到单元格底部。

问题是,在此之后单元格大小不会更新。我试图在单元格和集合视图中调用 LayoutIfNeeded,但这不起作用。我认为约束设置正确。按钮出现在正确的位置,但单元格只保留没有按钮的单元格的高度。如何告诉 CollectionView 更新单元格大小?

【问题讨论】:

  • 你试过func reloadItemsAtIndexPaths(indexPaths: [NSIndexPath])吗?
  • 我试过了:片刻单元格高度会更新到正确的时刻。但随后再次调用 cellForItemAtIndexPath,单元格高度重置并再次调用 reloadItemsAtIndexPaths。它会导致无限循环的大小调整。
  • 你用什么方法改变约束和添加按钮?
  • 在 GetCell 中。我需要 0-5 个与单元格左侧对齐的按钮。我想我会制作两个原型单元,一个有按钮,一个没有。

标签: ios xamarin autolayout uicollectionview ios-autolayout


【解决方案1】:

您可以参考下面的链接,也许您可​​以通过手动和自动设置 UICollectionViewCell 的大小来获得答案。

How make a collectionViewCell auto size only by height?

【讨论】:

  • 这对我没有用,因为它没有使用自动布局。我之前在代码中计算过高度,但这不是我老板想要的。
  • 该解决方案正在使用自动布局,否则 collectionView 单元格的子视图将无法正常显示。
  • Collectionview 没有任何像 tableView 对高度的概念 - UITableViewAutomaticDimension,而不是它,CollectionView 工作在 UICollectionViewLayout 的概念上。默认情况下,collectionView 具有 UICollectionViewFlowLayout。所以如果你不想使用 sizeForItemAtIndexPath 那么你需要创建自定义布局。
  • 对于自定义布局,您可以参考链接,它将为您提供更多帮助:raywenderlich.com/107439/…
  • 对您的链接答案的评论已经说明了这一点。只要正确设置了约束,您就不需要将 sizeForItemAtIndexPath 与自动布局一起使用。如果您限制宽度或高度,另一个将通过自动布局计算(只要您使用的是流布局)。
【解决方案2】:

==> 您可以使用 UICollectionViewFlowLayout 方法的 itemSize 属性来设置 UICollectionViewCell 的大小,也可以使用委托方法 collectionView:layout:sizeForItemAtIndexPath: 如果您需要动态设置 UICollectionViewCells 的大小。

【讨论】:

  • 这是以前的方法(手动计算大小并使用 sizeForItemAtIndexPath)。但现在它应该是布局本身。我设置的第一个约束效果很好(每个单元格都有它需要的大小)。但我不能告诉 UICollectionView 在单元格中查找更改的约束。对于 UITableView 我做了同样的事情。在运行时更新约束,然后调用 beginUpdates 和 endUpdates。这导致 tableview 更新新约束的行高。我正在 UICollectionView 中寻找类似的东西。
  • “但我不能告诉 UICollectionView 在单元格中查找更改的约束。”...这就是我真正想要的
猜你喜欢
  • 2021-12-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-03-04
  • 1970-01-01
  • 2016-07-09
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多