我是Swift的新手,正在尝试实现一个具有“演示”模式的应用程序。我正在尝试通过使用UICollectionView来实现这一点,其中纵向和横向模式下的单元格都是其所在框架的全宽及其高度的一半。问题是,当我以横向或纵向模式启动应用程序时,一切正常。但是,如果我从纵向模式开始,然后“向右”旋转到横向模式,则该单元格将不再适合框架的宽度。
到目前为止,我尝试过的是:
没有一个有效。
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
答案 0 :(得分:0)
您可以覆盖viewWillTransition
方法并重新加载,以便collectionView
重新计算大小。
override func viewWillTransition(to size: CGSize, with coordinator: UIViewControllerTransitionCoordinator) {
super.viewWillTransition(to: size, with: coordinator)
self.collectionView?.reloadData()
}