Изменение ориентации устройства CollectionViewCell - PullRequest
0 голосов
/ 05 мая 2020

Мне действительно нужна помощь в этом. Я разрабатываю приложение для заметок, где моя страница CollectionViewController содержит записные книжки. Я изо всех сил пытаюсь заставить блокноты изменять размер, когда вид переворачивается с портретного пейзажа. Мне тоже нужно по три блокнота в каждом ряду. Я прикрепил картинку, чтобы вы, ребята, могли понять, что я имею в виду.

Проблема в том, что когда вы создаете записные книжки в портретной ориентации и переворачиваете их в горизонтальную, вы можете разместить до 6 записных книжек в одном ряду. Так же, как если вы собираете записные книжки в альбомной ориентации и помещаете их в портретную, вы можете получить до двух ноутбуков подряд. Кроме того, размеры записной книжки иногда теряются при изменении ориентации.

Все это связано с возможностью правильно изменять размер ячеек представления моей коллекции при изменении ориентации устройства. Я прилагаю весь код из моего CollectionViewController и постараюсь изо всех сил его объяснить.

var arrayOfNotebooks: [Notebook] = []
var setOfNotebookNames = Set<String>()

class CollectionViewController: UICollectionViewController, UICollectionViewDelegateFlowLayout {

@IBOutlet var CollectionViewOutlet: UICollectionView!

override func viewDidLoad() {
    super.viewDidLoad()

    //Sets the side inserts of the CollectionView
    let flow = CollectionViewOutlet.collectionViewLayout as! UICollectionViewFlowLayout
       flow.sectionInset = UIEdgeInsets(top: 50, left: 50, bottom: 50, right: 50)
       flow.minimumLineSpacing = 50

    //Creates a new Unfiled Notes notebook if needed
    if (arrayOfNotebooks.count == 0) {
        let newNotebook = Notebook(notebookName: "Unfiled Notes", date: Date())
        arrayOfNotebooks.insert(newNotebook, at: 0)
        setOfNotebookNames.insert("Unfiled Notes")
    }
    //Updates the UI
    NotificationCenter.default.addObserver(forName: .updateInterface, object: nil, queue: OperationQueue.main) { (notification) in
        self.updateUI()
    }

}

//Creates the CodeNotes header at the top of the collectionView
override func collectionView(_ collectionView: UICollectionView, viewForSupplementaryElementOfKind kind: String, at indexPath: IndexPath) -> UICollectionReusableView {
    if (kind == UICollectionView.elementKindSectionHeader) {
        let headerView = collectionView.dequeueReusableSupplementaryView(ofKind: kind, withReuseIdentifier: "header", for: indexPath)
        // Customize headerView here
        return headerView
    }
    fatalError()
}

//Sets the size of the cells
public func collectionView(_ collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, sizeForItemAt indexPath: IndexPath) -> CGSize {
    return CGSize(width: ((CollectionViewOutlet.frame.size.width) / 4), height: ((CollectionViewOutlet.frame.size.height) / 4))
}


//Returns number of notebooks to put into the collectionView
override func collectionView(_ collectionView: UICollectionView, numberOfItemsInSection section: Int) -> Int {
    return arrayOfNotebooks.count
}

//Returns the cell object built on the main storyboard
override func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell {
    let cell = collectionView.dequeueReusableCell(withReuseIdentifier: "cell", for: indexPath as IndexPath) as! NotebookCell

    //Update label with name and date for every notebook in the array
    cell.notebookLabel.text = arrayOfNotebooks[indexPath.row].notebookName
    cell.notebookLabel.font = cell.notebookLabel.font.withSize(self.view.frame.width * 0.022)
    cell.dateLabel.text = cell.convertDate(date: arrayOfNotebooks[indexPath.row].date)
    cell.dateLabel.font = cell.dateLabel.font.withSize(self.view.frame.width * 0.05)
    //((pow(self.view.frame.width, 2) + pow(self.view.frame.height, 2)).squareRoot() * 0.014)
    return cell
}

//Updates the UI of the homepage
func updateUI() {
    CollectionViewOutlet.reloadData()
    print(setOfNotebookNames)
}

Это код, который я использую для сборки своего collectionViewController. Массив записных книжек - это объекты записной книжки, которые я добавляю в свое представление коллекции, и набор помогает мне убедиться, что нет повторяющихся имен.

Еще раз, я хочу, чтобы только три ноутбука могли правильно изменять размер в портретном или ландшафтном режиме. Я был бы признателен за помощь, поскольку я много читал в Интернете, но, тем не менее, спустя несколько дней я боролся с этим процессом. Спасибо.

Вот что происходит, когда я пытаюсь собрать записные книжки в альбомной ориентации, все размеры настолько перепутаны:

image

затем, когда я кладу его обратно в портрет вы получаете только 2 ноутбука в строке:

image

Вот как это должно выглядеть:

image

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