NSCollectionViewItem的动态大小

时间:2017-09-06 16:38:35

标签: swift macos nslayoutconstraint nscollectionview nscollectionviewitem

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

为此,我已添加到我的viewcontroller,它包含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:) item(at:) exception中突破

除了向Apple发送错误支持之外,还有人有其他想法吗? 并且因为item(at :)不应该抛出错误,所以catch catch bloc是无效的

2 个答案:

答案 0 :(得分:0)

正如你所提到的,我不认为这种方法会崩溃。 来自文档:

  

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

你试过add an exception breakpoint吗?你应该看到它崩溃的地方。

答案 1 :(得分:0)

sizeForItemAtIndexPath在创建UICollectionViewItem之前调用,所以不可能做到这一点。