UICollectionView – 调整设备上的单元格旋转 – Swift

UICollectionView – 调整设备上的单元格旋转 – Swift,第1张

概述我已经创建了一个UICollectionView,这样我就可以将视图排列成整齐的列.我希望设备上有一个专栏> 500像素宽. 为了实现这一点,我创建了这个函数: func collectionView(collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, sizeForItemA 我已经创建了一个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()}
总结

以上是内存溢出为你收集整理的UICollectionView – 调整设备上的单元格旋转 – Swift全部内容,希望文章能够帮你解决UICollectionView – 调整设备上的单元格旋转 – Swift所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: https://www.outofmemory.cn/web/1051869.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-25
下一篇 2022-05-25

发表评论

登录后才能评论

评论列表(0条)

保存