UICollectionViewFlowLayout, UICollectionView: изменение ориентации экрана нарушает расположение ячеек - PullRequest
0 голосов
/ 12 декабря 2018
let numberOfCellsPerRow: CGFloat = 3

override func viewDidLoad() {
    super.viewDidLoad()

    layout = UICollectionViewFlowLayout()
    layout.minimumLineSpacing = 0
    layout.minimumInteritemSpacing = 0

    collectionView = UICollectionView(frame: CGRect(x: 0, y: 0, width: view.frame.width, height: view.frame.height), collectionViewLayout: layout)
    collectionView.backgroundColor = .clear
    collectionView.dataSource = self
    collectionView.delegate = self
    collectionView.register(UICollectionViewCell.self, forCellWithReuseIdentifier: "cell")

    view.addSubview(collectionView)
}

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

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

func collectionView(_ collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, sizeForItemAt indexPath: IndexPath) -> CGSize {
    let cellWidth = (view.frame.width - max(0, numberOfCellsPerRow - 1) * layout.minimumInteritemSpacing) / numberOfCellsPerRow

    return CGSize(width: cellWidth, height: 75.0)
}

func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell {
    let itemCell = collectionView.dequeueReusableCell(withReuseIdentifier: "cell", for: indexPath)
    itemCell.backgroundColor = .black

    return itemCell
}

Вертикальная ориентация Vertical Orientation

Горизонтальная ориентация Horizontal Orientation

Я ожидаю все ячейки в одном ряду.Почему слева от первой ячейки есть какое-то поле (горизонтальная ориентация)?В случае, когда я запускаю приложение с горизонтальной ориентацией, между ячейками в вертикальной ориентации появляется некоторое пространство.

1 Ответ

0 голосов
/ 12 декабря 2018

Вы можете попробовать использовать автоматическую разметку

self.collectionView.translatesAutoresizingMaskIntoConstraints = false

NSLayoutConstraint.activate([

    self.collectionView.leadingAnchor.constraint(equalTo: self.view.leadingAnchor),
    self.collectionView.trailingAnchor.constraint(equalTo: self.view.trailingAnchor),
    self.collectionView.topAnchor.constraint(equalTo: self.view.topAnchor),
    self.collectionView.bottomAnchor.constraint(equalTo: self.view.bottomAnchor),

])

Или обновить рамку внутри viewWillTransition

override func viewWillTransition(to size: CGSize, with coordinator: UIViewControllerTransitionCoordinator) {

    super.viewWillTransition(to: size, with: coordinator)

    self.collectionView.frame = CGRect(x: 0, y: 0, width: view.frame.width, height: view.frame.height)

    self.collectionView.collectionViewLayout.invalidateLayout()

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