Быстрые слайды из коллекции viewview по выравниванию слайдов - PullRequest
0 голосов
/ 07 ноября 2018

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

one image

Когда я прокручиваю до вида коллекции, появляются некоторые сдвиги.

two image

Что я хочу, так это чтобы вид коллекции смещался вбок, а выравнивание выравниваний не менялось, но я очень старался найти решение. Я делюсь с вами своим кодом.

    override func awakeFromNib() {
    super.awakeFromNib()
    self.celloectionCat.delegate = self
    self.celloectionCat.dataSource = self
    self.celloectionCat?.register(UINib(nibName: "mycell", bundle: nil), forCellWithReuseIdentifier: "mycell")
    self.celloectionCat.showsHorizontalScrollIndicator = false
    self.celloectionCat.showsVerticalScrollIndicator = false
    self.celloectionCat.isPagingEnabled = true;
    self.celloectionCat.alwaysBounceVertical = false

}


extension Cell : UICollectionViewDelegateFlowLayout{

func collectionView(_ collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, insetForSectionAt section: Int) -> UIEdgeInsets {
    return UIEdgeInsets(top: 0, left: 15, bottom: 0, right: 15)
}

func collectionView(_ collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, sizeForItemAt indexPath: IndexPath) -> CGSize {
    let padding: CGFloat =  45.0
    let hpadding: CGFloat = 15.0
    let collectionViewWidthSize = collectionView.frame.size.width - padding
    let collectionViewHeightSize = collectionView.frame.size.height - hpadding

    return CGSize(width: collectionViewWidthSize / 2   , height: collectionViewHeightSize / 2  )
}

func collectionView(_ collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, minimumInteritemSpacingForSectionAt section: Int) -> CGFloat {
    return 15
}
func collectionView(_ collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, minimumLineSpacingForSectionAt section: Int) -> CGFloat {
    return 15
}
}

1 Ответ

0 голосов
/ 07 ноября 2018

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

Один из подходов к вашей проблеме - разделить ячейки на разделы, в частности, один раздел на страницу и четыре ячейки (максимум) на раздел. Если вы правильно настроите вставки разделов, то один раздел будет иметь размер представления коллекции, и ячейки будут выровнены по центру раздела.

Вот ваш код с небольшими изменениями. Я использовал жестко запрограммированные числа, но я советую вам не использовать это в своем коде (также вам следует рассмотреть возможность перемещения вычислений размера ячейки из метода sizeForItem, так как он будет вызываться несколько раз, но размер не изменится).

@IBOutlet weak var collectionView: UICollectionView! {
    didSet {
        collectionView.dataSource = self
        collectionView.delegate = self
        collectionView.showsHorizontalScrollIndicator = false
        collectionView.showsVerticalScrollIndicator = false
        collectionView.isPagingEnabled = true
    }
}

func numberOfSections(in collectionView: UICollectionView) -> Int {
    return 10
}

func collectionView(_ collectionView: UICollectionView, numberOfItemsInSection section: Int) -> Int {
    return 4
}

func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell {
    let cell = collectionView.dequeueReusableCell(withReuseIdentifier: "cell identifier", for: indexPath)
    // setup your cell

    return cell
}


func collectionView(_ collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, sizeForItemAt indexPath: IndexPath) -> CGSize {
    let padding: CGFloat =  45.0
    let hpadding: CGFloat = 15.0
    let collectionViewWidthSize = collectionView.frame.size.width - padding
    let collectionViewHeightSize = collectionView.frame.size.height - hpadding

    return CGSize(width: collectionViewWidthSize / 2   , height: collectionViewHeightSize / 2  )
}

func collectionView(_ collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, insetForSectionAt section: Int) -> UIEdgeInsets {
    return UIEdgeInsets(top: 0, left: 15, bottom: 0, right: 15)
}

func collectionView(_ collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, minimumInteritemSpacingForSectionAt section: Int) -> CGFloat
{
    return 15
}

func collectionView(_ collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, minimumLineSpacingForSectionAt section: Int) -> CGFloat {
    return 15
}
...