window 调整大小后 NSCollectionView 的奇怪行为
Weird behavior of NSCollectionView after window resize
以下是我设置收藏视图的方式:
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)
}
乍一看,它看起来不错。
但是在我调整应用程序 window 的大小后,奇怪的事情出现了 up.Here 是这样的:
我该如何解决这个问题?谢谢。
您必须根据 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)
}
}
过了一段时间,我发现完全是我的错。
在collectionview的委托方法中,我忘记使用func makeItem(withIdentifier identifier: NSUserInterfaceItemIdentifier, for indexPath: IndexPath) -> NSCollectionViewItem
,而是每次都使用init(nibName: nil, bundle: nil)
!
我觉得自己很傻。
以下是我设置收藏视图的方式:
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)
}
乍一看,它看起来不错。
但是在我调整应用程序 window 的大小后,奇怪的事情出现了 up.Here 是这样的:
我该如何解决这个问题?谢谢。
您必须根据 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)
}
}
过了一段时间,我发现完全是我的错。
在collectionview的委托方法中,我忘记使用func makeItem(withIdentifier identifier: NSUserInterfaceItemIdentifier, for indexPath: IndexPath) -> NSCollectionViewItem
,而是每次都使用init(nibName: nil, bundle: nil)
!
我觉得自己很傻。