【问题标题】:Resizing UIViews in UICollectionViewCells from another UICollectionView从另一个 UICollectionView 调整 UICollectionViewCells 中的 UIView 大小
【发布时间】:2018-01-09 02:18:17
【问题描述】:

我有一个包含 UICollectionView 的 UIView,并且该集合视图中的每个 UICollectionViewCell 都包含一个 UIImageView。

我需要它,以便每个单元格中的每个 UIImageView 都可以根据来自超级视图控制器的变量调整大小。

在本例中名为 progress 的变量应该增加单元格图像视图的大小。

目前我已将变量传递到 collectionview 并正在调用 reloadData(),以设置我在 imageviews 上的相关约束的常量。但这只是在没有适当动画的情况下重新创建每个图像视图。而且这种方法似乎也不正确。

我可以将变量从视图控制器传递到集合视图中,问题是我如何将它传递到单元格中。每当我尝试时,我都会得到零。

有什么建议吗?

【问题讨论】:

  • 我认为您的标题具有误导性。您的意思是从容器 UIView 调整 UICollectionViewCells 的大小吗?

标签: ios swift uicollectionviewcell


【解决方案1】:

您在将变量从 UIView 传递到集合视图的正确轨道上。但是,从那里开始,无需将值传递到每个单元格(尽管这也应该有效)。

在没有看到任何代码的情况下,我建议将图像视图公开,直接在 cellForRowAt 下更改集合视图中的约束,然后使用

UIView.animate(withDuration: 5, animations: { 
    cell.view.layoutIfNeeded()
}, completion: nil)

为更改设置动画。 (免责声明:未经测试的代码)。

【讨论】:

  • 那个方法不是只有在cell排队的时候才调用的吗?
  • @Stefan Cell 每次回收时都会重新排队。如果将单元格滚动到屏幕外足够远,它将出列,然后在再次可见时重新入列。调用 reloadData() 会强制每个单元格出列和重新入队。
  • 这是我的第一个想法,用这些新值重新加载 collectionView。但是,如前所述,我正在使用平移手势中的值更新约束。这意味着我会在手势完成之前多次调用reloadData()。我已经想到了一些其他方法可以解决这个问题,但我仍然很好奇是否有办法正确地做到这一点。
  • @Stefan 啊,我不知道您使用的是平移手势...这可能意味着除非您获得出色的性能,否则此选项已失效。我不确定一个合适的解决方案是什么样的,除了一个运行平稳的解决方案。如果您确实找到了,请分享以供将来参考。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多