我已经创建了一个UICollectionView,这样我就可以将视图排列成整齐的列.我希望设备上有一个专栏> 500像素宽.
为了实现这一点,我创建了这个函数:
func collectionView(collectionView: UICollectionView,layout collectionViewLayout: UICollectionViewLayout,sizeforItemAtIndexPath indexPath: NSIndexPath) -> CGSize { let size = collectionView.frame.width if (size > 500) { return CGSize(width: (size/2) - 8,height: (size/2) - 8) } return CGSize(width: size,height: size) }
这在第一次加载时按预期工作,但是当我旋转设备时,计算并不总是再次发生,并且视图并不总是按预期重绘.这是旋转设备时的代码:
override func willRotatetoInterfaceOrientation(toInterfaceOrientation: UIInterfaceOrientation,duration: NSTimeInterval) { collectionView.collectionViewLayout.invalidateLayout() self.view.setNeedsdisplay() }
我假设我忘了重绘一些东西,但我不确定是什么.任何想法都非常感谢收到!
您可以使用viewWillLayoutSubviews.
This question应该是有用的,但只要视图控制器视图要布局其子视图,就会以低音方式调用它.
所以你的代码看起来像这样:
override func viewWillLayoutSubviews() { super.viewWillLayoutSubviews() guard let flowLayout = collectionView.collectionViewLayout as? UICollectionViewFlowLayout else { return } if UIInterfaceOrientationIsLandscape(UIApplication.sharedApplication().statusBarOrientation) { //here you can do the logic for the cell size if phone is in landscape } else { //logic if not landscape } flowLayout.invalidateLayout() }
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。