我在Interface Builder中构建了详细视图,显示了有关某些对象的信息和照片。由于信息的长度和照片的数量会有所不同,因此所有信息都嵌套在UIScrollView
中。
照片显示在UICollectionView
中,但我需要始终显示所有包含的照片,因此我禁用此功能的滚动和动态更改Height
UICollectionView
约束(在完成渲染时调用)细胞):
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
约束更改设置动画?
将Xcode 6.1用于目标IOS 8.
答案 0 :(得分: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)
}
答案 1 :(得分:0)
您是否尝试将约束更新包装到视图动画中?
photosCollectionViewHeightConstraint.constant =
photosCollectionView.collectionViewLayout.collectionViewContentSize()
photosCollectionView.setNeedsUpdateConstraints()
UIView.animateWithDuration(0.3, animations: { () -> Void in
photosCollectionView.layoutIfNeeded()
})