Как исправить ширину элемента в UIcollectionView при переходе от портрета к пейзажу? - PullRequest
2 голосов
/ 03 апреля 2019

Я новичок в 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 голосов
/ 03 апреля 2019

Вы можете переопределить метод viewWillTransition и перезагрузить его, чтобы collectionView пересчитал размер.

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

    self.collectionView?.reloadData()
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...