Мне действительно нужна помощь в этом. Я разрабатываю приложение для заметок, где моя страница 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
. Массив записных книжек - это объекты записной книжки, которые я добавляю в свое представление коллекции, и набор помогает мне убедиться, что нет повторяющихся имен.
Еще раз, я хочу, чтобы только три ноутбука могли правильно изменять размер в портретном или ландшафтном режиме. Я был бы признателен за помощь, поскольку я много читал в Интернете, но, тем не менее, спустя несколько дней я боролся с этим процессом. Спасибо.
Вот что происходит, когда я пытаюсь собрать записные книжки в альбомной ориентации, все размеры настолько перепутаны:
затем, когда я кладу его обратно в портрет вы получаете только 2 ноутбука в строке:
Вот как это должно выглядеть: