Редактирование ширины CollectionViewCell
Я пытаюсь изменить ширину ячейки, чтобы независимо от размера экрана score1.count
клетки в ряд. Код, который я использую для просмотра коллекции, выглядит следующим образом:
func numberOfSections(in collectionView: UICollectionView) -> Int {
return 1
}
func collectionView(_ collectionView: UICollectionView, numberOfItemsInSection section: Int) -> Int {
return self.items.count
}
func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell {
let cell = collectionView.dequeueReusableCell(withReuseIdentifier: reuseIdentifier, for: indexPath as IndexPath) as! MyCollectionViewCell
cell.myLabel.text = String(self.items[indexPath.item])
return cell
}
Это функция нацеливания на ширину ячейки.
func collectionView(_ collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout,sizeForItemAt indexPath: IndexPath) -> CGSize {
let size = Int(self.view.frame.size.width)/(score1.count + 1)
return CGSize(width: CGFloat(size), height: 80)
}
Я провел много часов, просматривая разные источники и пробуя разные вещи, но в представлении коллекции никогда не было нужного количества ячеек. Одна идея состоит в том, что это может быть потому, что у меня есть размер ячейки, установленный в автоматическом макете, но всякий раз, когда я иду, чтобы изменить его, xcode падает. Есть идеи по обходу авто макета? Или как поменять авто макет?
Спасибо!
2 ответа
Попробуй это
extension YourViewController : UICollectionViewDelegateFlowLayout{
func collectionView(_ collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, sizeForItemAt indexPath: IndexPath) -> CGSize {
let rowItems:CGFloat = 4
let padding:CGFloat = 2
let width = (collectionView.bounds.width / rowItems) - padding //Change width as per your requirement
let height = collectionView.bounds.height - (2 * padding)//Change height as per your requirement
return CGSize(width: width, height: height)
}
}
Вы можете изменить свой sizeForItemAtIndexPath как. Вы можете назначить размер ячейки после вычитания поля и погружения по номеру ячейки.
func collectionView(_ collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout,sizeForItemAt indexPath: IndexPath) -> CGSize {
let size = (Int(collectionView.bounds.width) - (score1.count+1)*5) /(score1.count) // 5 is the margin you want to keep in between 2 cells
return CGSize(width: CGFloat(size), height: 80)
}
Дайте мне знать, если у вас есть какие-либо вопросы. Я бы попытался уточнить.