2014-11-15 21 views
0

我在Interface Builder中构建了一个显示有关某个对象的信息和照片的详细视图。由于信息长度和照片数量会有所不同,因此全部嵌套在UIScrollView中。在视图转换后调整UICollectionView的大小

照片显示在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的大小?如果不是,如何在转换期间动态约束更改?

使用的Xcode 6.1目标IOS 8

回答

0

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

photosCollectionViewHeightConstraint.constant = 
    photosCollectionView.collectionViewLayout.collectionViewContentSize() 
photosCollectionView.setNeedsUpdateConstraints() 

UIView.animateWithDuration(0.3, animations: {() -> Void in 
    photosCollectionView.layoutIfNeeded() 
}) 
+0

这是几乎完美的解决方案,尤其是当同时调用'setNeedsUpdateConstraints'和'layoutIfNeeded'上后续视图(下面'UICollectionView')。谢谢蒙迪! –

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) 
} 
相关问题