【问题标题】:NSCollectionView grid display only one rowNSCollectionView 网格只显示一行
【发布时间】:2017-07-09 21:28:31
【问题描述】:

我有一个带有以下参数的 NSCollectionView:

并且有一个自定义的NSCollectionViewItemWebView 来显示html 页面

extension ViewController : NSCollectionViewDataSource {

    func numberOfSections(in collectionView: NSCollectionView) -> Int {
        return 5
    }

    func collectionView(_ collectionView: NSCollectionView, numberOfItemsInSection section: Int) -> Int {
        return 1
    }

    func collectionView(_ itemForRepresentedObjectAtcollectionView: NSCollectionView, itemForRepresentedObjectAt indexPath: IndexPath) -> NSCollectionViewItem {

        let item = htmlNotificationsCollectionView.makeItem(withIdentifier: "htmlNotificationCollectionViewItem", for: indexPath)
        return item
    }
}

我的代码正在运行,但它只显示一项!并忽略numberOfSections 垂直显示

如果我将 numberOfItemsInSection 更改为 3,它会显示 3 个项目,但水平显示。

我需要这样的布局:

【问题讨论】:

  • "如果我将 numberOfItemsInSection 更改为 3,它会显示 3 个项目,但水平显示。"这取决于窗口大小。
  • @El Tomato 是的,出现了滚动,但是如何使它们垂直。它显示一个任意大小的项目...

标签: objective-c swift macos cocoa nscollectionview


【解决方案1】:

您应该以编程方式设置 maximumNumberOfColumns:

let layout = NSCollectionViewGridLayout()
    layout.maximumNumberOfColumns = 1
    collectionView.collectionViewLayout = layout

(由于某些原因,当您在 Storyboard 上设置 Grid 属性时它不起作用)

【讨论】:

    【解决方案2】:

    NSCollectionViewGridLayout 是单节布局。根据 Apple 文档,这意味着布局只能包含一个部分。

    在行和列网格中显示单个项目部分的布局。

    这就是为什么你没有得到更多的部分。

    将其更改为 NSCollectionViewFlowLayout 以获得多个部分。希望这会有所帮助。

    【讨论】:

      猜你喜欢
      • 2018-07-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-03-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-02-10
      相关资源
      最近更新 更多