UICollectionView 从纵向到横向

Posted

技术标签:

【中文标题】UICollectionView 从纵向到横向【英文标题】:UICollectionView from portrait to landscape 【发布时间】:2015-07-15 04:36:17 【问题描述】:

我在我的项目中使用 UICollectionView。我开始以编程方式(迅速)做所有的事情。 这是我的代码,它启动并将 collectionView 添加到屏幕:

var collectionView: UICollectionView!
override func viewDidLoad() 
    super.viewDidLoad()

    let layout: UICollectionViewFlowLayout = UICollectionViewFlowLayout()
    layout.sectionInset = UIEdgeInsets(top: COLLECTION_VIEW_DISTANCE_TOP, left: COLLECTION_VIEW_DISTANCE_LEFT, bottom: COLLECTION_VIEW_DISTANCE_BOTTOM, right: COLLECTION_VIEW_DISTANCE_RIGHT)
    layout.itemSize = CGSize(width: 90, height: 120)

    collectionView = UICollectionView(frame: self.view.frame, collectionViewLayout: layout)
    collectionView.dataSource = self
    collectionView.delegate = self
    collectionView.registerClass(UICollectionViewCell.self, forCellWithReuseIdentifier: "Cell")
    collectionView.backgroundColor = UIColor.whiteColor()
    self.view.addSubview(collectionView)

所有大写字母的变量都是我之前创建的常量。

一切都很好,除了我从纵向切换到横向时,每行中的项目数没有改变,尽管切换到横向时,该行中的项目应该比以前更多。

我试图覆盖这个函数:

override func didRotateFromInterfaceOrientation(fromInterfaceOrientation: UIInterfaceOrientation) 
    collectionView.frame = self.view.frame

它起作用了,但是当旋转 iPhone 时,它​​需要大约半秒才能填满行(它完成这项工作的速度很慢,方式很丑)。

我该如何解决这个问题?

【问题讨论】:

【参考方案1】:

Apple 已弃用 ios 8 SDK 中的 willRotateMethod 方法。因此,您在 didRotateMethod 方法中编写的代码将在 viewDidLayoutSubviews 中编写,这样您的问题就会得到解决。

【讨论】:

没有这样的方法。我尝试覆盖此方法: override func willRotateToInterfaceOrientation(toInterfaceOrientation: UIInterfaceOrientation, duration: NSTimeInterval) 但它对我不起作用。

以上是关于UICollectionView 从纵向到横向的主要内容,如果未能解决你的问题,请参考以下文章

纵向和横向的 uicollectionview 单元格框架

UICollectionView 方向改变事故?

在 iPhone 中将视图从纵向切换到横向,就像 iPhone 中的计算器一样

纵向和横向 ipad 的差异 UI

UICollectionView横向滚动,sectionHeader的问题

纵向/横向单点触控旋转视图