2

我正在尝试为我的 NSCollectionViewItem 提供动态大小。我希望它们的大小取决于它们的内容和我定义的约束。

为此,我已将以下内容添加到包含 NSCollectionView 的视图控制器中:

extension ViewController :  NSCollectionViewDelegateFlowLayout {
    func collectionView(_ collectionView: NSCollectionView, layout collectionViewLayout: NSCollectionViewLayout, sizeForItemAt indexPath: IndexPath) -> NSSize{

        let item = collectionView.item(at: indexPath)
        if let viewItem = item as NSCollectionViewItem? {
            return viewItem.view.fittingSize
        }

        return NSSize(width: 200, height: 100)

    }
}

哪个抛出异常。

An uncaught exception was raised
*** -[__NSArrayM objectAtIndex:]: index 1 beyond bounds [0 .. 0]

我不知道它来自哪里,我试图抓住它,但 xcode 说它item(at:)不会引发异常。

编辑:但事实上确实如此,我有一个异常断点,它闯入item(at:) 项目(在:)异常

除了向 Apple 发送错误报告之外,有人还有其他想法吗?而且由于 item(at:) 不应该抛出错误,所以 do catch bloc 是无效的

4

2 回答 2

0

sizeForItemAtIndexPath在创建 a 之前调用UICollectionViewItem,所以不可能这样做。

于 2018-08-08T21:06:56.133 回答
0

正如您所提到的,我认为这种方法不会崩溃。从文档中:

返回:指定索引路径的项目,如果没有项目可用,则返回 nil。

您是否尝试添加异常断点?你应该看到它崩溃的地方。

于 2017-09-06T16:59:20.990 回答