窗口调整大小后,NSCollectionView的异常行为

时间:2019-03-05 10:29:54

标签: swift macos layout resize nscollectionview

这是我设置收藏夹视图的方式:

    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

并在collectionview的委托中:

    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 :(得分:0)

您将必须根据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)
    }

}

答案 1 :(得分:0)

一段时间后,我发现这完全是我的错。

在collectionview的委托方法中,我忘记使用func makeItem(withIdentifier identifier: NSUserInterfaceItemIdentifier, for indexPath: IndexPath) -> NSCollectionViewItem,而是每次都使用init(nibName: nil, bundle: nil)

我真是个傻瓜。