Mam następujący układ dla mojego układu kompozytorskiego

func createLayout() -> UICollectionViewLayout {
    let layout = UICollectionViewCompositionalLayout {
        (sectionIndex: Int, layoutEnvironment: NSCollectionLayoutEnvironment) -> NSCollectionLayoutSection? in

        let dayItemSize = NSCollectionLayoutSize(widthDimension: .absolute(74), heightDimension: .fractionalHeight(1))
        // 2. Setup media group
        let dayItem = NSCollectionLayoutItem(layoutSize: dayItemSize)
        let dayGroupSize = NSCollectionLayoutSize(widthDimension: .fractionalWidth(1.0),heightDimension: .fractionalHeight(1.0))
        let dayGroup = NSCollectionLayoutGroup.horizontal(layoutSize: dayGroupSize, subitems: [dayItem])
        let interitemSpacing = CGFloat(10)
        dayGroup.interItemSpacing = .fixed(interitemSpacing)
        let section = NSCollectionLayoutSection(group: dayGroup)
        section.orthogonalScrollingBehavior = .continuous
        return section
    }
    return layout
}

W moim kolekcji znajduje się 30 "dzień".

  fileprivate func makeDataSource() -> DataSource {
        let dataSource = DataSource(
            collectionView: collectionView,
            cellProvider: { (collectionView, indexPath, YearMonthDay) ->
              UICollectionViewCell? in
                let cell = collectionView.dequeueReusableCell(withReuseIdentifier: TimelineDayCell.identifier, for: indexPath) as? TimelineDayCell
                cell?.configure(with: YearMonthDay)
                cell?.dayLabel.text = String(indexPath.section)+","+String(indexPath.row)
                return cell
            })
        return dataSource
    }
    func configureDataSource() {
        self.collectionView!.register(TimelineDayCell.nib, forCellWithReuseIdentifier: TimelineDayCell.identifier)
    }
    func applySnapshot(animatingDifferences: Bool = true) {
      // 2
      var snapshot = DataSourceSnapshot()
        snapshot.appendSections([.main])
        snapshot.appendItems(days) # 30 of these
      dataSource.apply(snapshot, animatingDifferences: animatingDifferences)
    }

Mój UicollectionViewController obejmuje całą szerokość ekranu. Moje komórki w ekranie wyglądają tak:

enter image description here enter image description here enter image description here

enter image description here

Tekst na komórkach jest ich ścieżką indeksu. Widać, że pomiędzy 0-4, 5-9 odstępa jest jednolite, a następnie na krawędziach 4-5 i 9-10, jego różni się. Wierzę, że to dlatego, że jest to "krawędź" między ekranami. Ale co mogę z tym zrobić?

Próbowałem również za pomocą no Orthogonal Scroll zachowań i wystarczy ustawić kierunek przewijania konfiguracji układu

   let config = UICollectionViewCompositionalLayoutConfiguration()
   config.scrollDirection = .horizontal
   layout.configuration = config
   return layout

Wydaje się to osiągnąć to samo. Jakieś sugestie tutaj?

Edytuj: Wydaje się, że to zachowanie opiera się na doborze grupy. Na przykład, gdy używam pozwól Daughroup = NscollectionLayoutgroup.Horizontal (układanie: DaytgroupSize, Subitem: Dayitem, Count: 30), sprawia, że wszystkie elementy leżą obok siebie:

enter image description here

Teraz jest 30 oddzielnych przedmiotów. Zauważ, w jaki sposób ma automatycznie rozmieszczony odległość między nimi, aby mogła zmieścić 30 na 1 szerokość ekranu. W ten sposób nadal próbuje wymusić wszystkie elementy w 1 grupie na pojedynczy ekran, który jest zachowaniem, którego nie chcę. Chcę, aby grupa była szerokością całego rozmiaru treści i przewijania.

0
BigBoy1337 5 październik 2020, 22:36

1 odpowiedź

Najlepsza odpowiedź

Ok rozwiązałem go. Ma to związek z grupą grupową. Miałem let dayGroupSize = NSCollectionLayoutSize(widthDimension: .fractionalWidth(1.0),heightDimension: .fractionalHeight(1.0))

Odstępy między przedmiotem jest między elementami grupowymi. A wielkość grupy była wielkością mojego okna. Muszę więc dokonać rozmiaru grupy całej zawartości (większy niż okno na przykład.

0
BigBoy1337 5 październik 2020, 23:16