【问题标题】:itemSize not animating with setCollectionViewLayout(toLayout, animated: true);itemSize 不使用 setCollectionViewLayout(toLayout, animated: true) 设置动画;
【发布时间】:2014-08-21 20:57:52
【问题描述】:

您好,我正在尝试使用 UICollection 视图并让它们具有多个布局。

当我使用 swift/obj-cs setCollectionViewLayout(toLayout, animated: true);动画确实会重新排列单元格,但单元格中的项目会跳转到最终大小,而不是随着单元格逐渐增长,最终结果是看起来很糟糕的动画。

这是我正在切换的两种布局:

{
    override init()
    {
        super.init()
        minimumLineSpacing = 20.0;
        minimumInteritemSpacing = 0.0;
        itemSize = CGSizeMake(80.0, 80.0)
        sectionInset = UIEdgeInsetsMake(20.0, 60.0, 20.0, 60.0)
    }


    required init(coder: NSCoder) {
        fatalError("NSCoding not supported")
    }

还有一个:

{
    override init()
    {
        super.init()
        minimumLineSpacing = 10.0;
        minimumInteritemSpacing = 10.0;
        itemSize = CGSizeMake(150.0, 150.0)
        sectionInset = UIEdgeInsetsMake(20.0, 20.0, 20.0, 20.0)
    }


    required init(coder: NSCoder) {
        fatalError("NSCoding not supported")
    }

以及用于更改布局的代码:

func changeLayoutWithLayout(toLayout:UICollectionViewFlowLayout)
{
    self.setCollectionViewLayout(toLayout, animated: true);

}

有没有办法让 itemSize 正确设置动画?或者为过渡创建我自己的自定义动画?我尝试使用 batchupdates 方法,但是这给了我相同的结果,即 itemsize 跳转到其最终值。

【问题讨论】:

  • 嗨,你有没有想过这个问题?我遇到了完全相同的问题
  • @MichaelForrest 遗憾的是,我从未找到解决问题的方法。我尝试了几种手动动画方法,但我尝试的所有方法要么性能不佳,要么看起来不对。实际上我只是一起放弃了 UIKit,现在我 90% 的工作都是在 SpriteKit 中完成的。

标签: ios objective-c swift uicollectionview uicollectionviewlayout


【解决方案1】:

我发现UIColletionViewCellUIColletionViewCell.contentViewsetCollectionViewLayout(toLayout, animated: true) 调用的动画期间具有不同的行为,单元格的大小逐渐增长,而contentView 跳转到最终大小。 但苹果建议内容视图是您应该添加单元格的自定义内容的主视图。

【讨论】:

    【解决方案2】:

    当你调用函数changeLayoutWithLayout时,你可以尝试重新初始化layout。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2018-02-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-05-12
      相关资源
      最近更新 更多