Странное поведение NSCollectionView после изменения размера окна - PullRequest
0 голосов
/ 05 марта 2019

Вот как я настраиваю свой коллекционный вид:

    let layout = NSCollectionViewFlowLayout.init()
    layout.scrollDirection = .vertical
    layout.minimumLineSpacing = 20
    layout.minimumInteritemSpacing = 20
    pCollectionView.collectionViewLayout = layout

    pCollectionView.backgroundColors = [NSColor.clear]
    pCollectionView.dataSource = self
    pCollectionView.delegate = self
    pCollectionView.isSelectable = true

А в делегате коллекционного вида:

    func collectionView(_ collectionView: NSCollectionView, layout collectionViewLayout: NSCollectionViewLayout, sizeForItemAt indexPath: IndexPath) -> NSSize {
        return NSSize(width: 240, height: 135)
    }

Сначала он выглядит хорошо.enter image description here

Но после того, как я изменил размер окна приложения, всплыли усталые вещи. Вот как это выглядит:

enter image description here

Как я могу это исправить?Спасибо.

Ответы [ 2 ]

0 голосов
/ 05 марта 2019

Через некоторое время я обнаружил, что это полностью моя вина.

В методе делегата collectionview я забыл использовать func makeItem(withIdentifier identifier: NSUserInterfaceItemIdentifier, for indexPath: IndexPath) -> NSCollectionViewItem, вместо этого я использую init(nibName: nil, bundle: nil) каждый раз!.

Я чувствовал себя таким дураком.

0 голосов
/ 05 марта 2019

Вам нужно будет установить размер ячеек в соответствии с размером collectionView.frame

layout.minimumLineSpacing = 20
layout.minimumInteritemSpacing = 20

Не является ограничением и не будет сохранять ячейки такими, как вы хотите.

Вам нужно будет:

extension YourViewController: UICollectionViewDelegate,UICollectionViewDataSource,UICollectionViewDelegateFlowLayout {

    func collectionView(_ collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, sizeForItemAt indexPath: IndexPath) -> CGSize {
         //work out the size of cell according to how many you want in a row
         return CGSize(width: screenWidth/3, height: cellHeight)
    }

}
...