【问题标题】:Resize UICollectionView after view transition视图转换后调整 UICollectionView 的大小
【发布时间】:2014-11-15 09:43:05
【问题描述】:

我在 Interface Builder 中构建了详细视图,显示有关某些对象的信息和照片。因为信息的长度和照片的数量会有所不同,所以都嵌套在UIScrollView中。

照片在UICollectionView 中显示,但我需要始终显示所有包含的照片,因此我禁用了滚动并通过此函数(在完成渲染单元格时调用)动态更改UICollectionViewHeight 约束:

func resizePhotosCollectionView() {
    photosCollectionViewHeightConstraint.constant = photosCollectionView.collectionViewLayout.collectionViewContentSize()
}

在此 UICollectionView 需要调整大小(通常通过设备方向更改)之前,它工作得很好。我正在尝试在函数中使用UIViewControllerTransitionCoordinator

override func viewWillTransitionToSize(size: CGSize, withTransitionCoordinator coordinator: UIViewControllerTransitionCoordinator) {
    coordinator.animateAlongsideTransition(nil) { context in
        self.resizePhotosCollectionView()
    }
    super.viewWillTransitionToSize(size, withTransitionCoordinator: coordinator)
}

但结果很不稳定,因为转换完成后Height 约束发生了变化。

有什么方法可以在视图转换后自动调整UICollectionView 的大小?如果没有,如何在过渡期间为Height 约束更改设置动画?

对目标 IOS 8 使用 Xcode 6.1。

【问题讨论】:

    标签: ios swift uiscrollview uicollectionview autolayout


    【解决方案1】:

    如果我没记错的话,您需要立即布局视图。

    override func viewWillTransitionToSize(size: CGSize, withTransitionCoordinator coordinator: UIViewControllerTransitionCoordinator) {
        coordinator.animateAlongsideTransition(nil) { context in
            self.resizePhotosCollectionView()
            self.view.setNeedsLayout()
            self.view.layoutIfNeeded()
        }
        super.viewWillTransitionToSize(size, withTransitionCoordinator: coordinator)
    }
    

    【讨论】:

      【解决方案2】:

      您是否尝试过将约束更新包装到视图动画中?

      photosCollectionViewHeightConstraint.constant =
          photosCollectionView.collectionViewLayout.collectionViewContentSize()
      photosCollectionView.setNeedsUpdateConstraints()
      
      UIView.animateWithDuration(0.3, animations: { () -> Void in
          photosCollectionView.layoutIfNeeded()
      })
      

      【讨论】:

      • 这几乎是完美的解决方案,尤其是在后续视图中同时调用setNeedsUpdateConstraintslayoutIfNeeded 时(在UICollectionView 下方)。谢谢蒙迪!
      猜你喜欢
      • 2014-06-27
      • 2015-06-16
      • 2016-08-19
      • 2013-02-24
      • 2015-12-29
      • 2017-11-05
      • 2014-12-09
      • 1970-01-01
      • 2018-05-19
      相关资源
      最近更新 更多