从纵向移动到横向时如何在UIcollectionView中固定项目宽度?

时间:2019-04-03 05:55:40

标签: swift

我是Swift的新手,正在尝试实现一个具有“演示”模式的应用程序。我正在尝试通过使用UICollectionView来实现这一点,其中纵向和横向模式下的单元格都是其所在框架的全宽及其高度的一半。问题是,当我以横向或纵向模式启动应用程序时,一切正常。但是,如果我从纵向模式开始,然后“向右”旋转到横向模式,则该单元格将不再适合框架的宽度。

到目前为止,我尝试过的是:

  • 将setUpCollectionView()函数移入和移出viewDidLoad
  • 在函数中调整我的sizeForItem
  • 调整自动布局约束

没有一个有效。

ViewController类:UIViewController,UICollectionViewDataSource,UICollectionViewDelegate,UICollectionViewDelegateFlowLayout {

let textArray = ["Some text", "Some other text", "even more stuff", "And more stuff", "And this is more text"]

@IBOutlet weak var collectionView: UICollectionView!


override func viewDidLoad() {
    super.viewDidLoad()
    // Do any additional setup after loading the view, typically from a nib.
    collectionView.dataSource = self
    collectionView.delegate = self

    setUpCollectionView()
}

// setUpCollectionView()

func setUpCollectionView() {

    if let flowLayOut = collectionView?.collectionViewLayout as? UICollectionViewFlowLayout {
        flowLayOut.scrollDirection = .horizontal
        flowLayOut.minimumLineSpacing = 0
    }
}

func collectionView(_ collectionView: UICollectionView, numberOfItemsInSection section: Int) -> Int {

    return textArray.count
}

func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell {

    let cell = collectionView.dequeueReusableCell(withReuseIdentifier: "cell", for: indexPath) as! TextCell

    cell.textView.text = textArray[indexPath.row]

    collectionView.isPagingEnabled = true

    return cell
}

// MARK: - Make the cell fill the view size

func collectionView(_ collectionView: UICollectionView,
                    layout collectionViewLayout: UICollectionViewLayout,
                    sizeForItemAt indexPath: IndexPath) -> CGSize {

    return CGSize(width: view.frame.width, height: view.frame.height / 2)
}

}

感谢您的帮助。我想要的是,无论横向还是纵向,该单元始终保持框架的整个宽度。

纵向屏幕截图(正确) !(https://photos.app.goo.gl/nozLPGF8X7E1aNDE6

横向截图(不正确) !https://photos.app.goo.gl/YCTJdmqVY6eKkpYS8

横向截图(正确) https://photos.app.goo.gl/pjWyC1oZeckUuHE66

1 个答案:

答案 0 :(得分:0)

您可以覆盖viewWillTransition方法并重新加载,以便collectionView重新计算大小。

override func viewWillTransition(to size: CGSize, with coordinator: UIViewControllerTransitionCoordinator) {
    super.viewWillTransition(to: size, with: coordinator)

    self.collectionView?.reloadData()
}