NSCollectionView loses scrollbars after changing m

2019-10-30 00:13发布

我有一个NSCollectionView与垂直NSCollectionViewFlowLayout 。 我在显示它的矩形图标。

我也有在UI的滑块,以及改变的时候,我调整minItemSize ,然后我在使用collectionView:itemForRepresentedObjectAtIndexPath:创建一个同样大小的NSImageView返回的NSCollectionViewItemimageView 。 然后我重装通过调用视图reloadData

在此之后,视图显示在新大小的图标如预期。

问题是,只要我有更多的数据,以显示出比适合当前scoll观点,认为当常规系统首选项设置为显示滚动条:滚动时 ,滚动条重装集合视图,并试图与滚动后消失触控板导致了在告诉我,滚动视图认为,内容就是什么是可见的,没有更多的滚动反弹。

但只要我调整窗口的大小,这也重新调整内部的集合视图,滚动条回来。

奇怪的是,如果系统偏好设置设置为显示滚动条:永远 ,那么问题不会出现,滚动总是工作,和滚动条始终保持可见。

我已经尝试了很多事情来触发滚动视图的重新计算,如无效集合视图的布局,滚动视图本身,它的内容视图的布局,并且还试图自己needsLayout设置为true。 没有什么使得这项工作。

更新:潜在的重复 ( NSCollectionView不会滚动过去的初始可见矩形项目 ),无论是collectionView.setFrameSize:也不是window.setFrame:建议对我的情况下工作(我试过前后分别增加这些线路reloadData )。

即使我用力喜欢这个窗口的大小,因此,不带滚动条后面,只有在窗口边的手动拖动作用:

[self.collectionView.window setFrame:NSInsetRect(self.view.window.frame, 1, 1) display:YES];

还要注意的是,在我的情况下,开始滚动的作品,只是没有调整和重新加载后。

另一项发现:当我打电话selectItemsAtIndexPaths:scrollPosition: reloadData后,再滚动回来。 但是,只有当我传递一个非空NSSet的路径。 而且因为我可能没有选择任何产品,这是不是一个永久性的解决方案。

如果没有其他的想法上来,我会尽力做一个示范项目。

Answer 1:

我已经解决了它:

我不得不推迟调用reloadData由块代码中调用它,例如dispatch_async(dispatch_get_main_queue(), ^{ ... });

在修复之前,我没有打电话reloadData从一setSliderValue:处理器,这势必滑块的值。 看来,这并没有顺利在一起。



文章来源: NSCollectionView loses scrollbars after changing minItemSize until view gets resized