首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >NSCollectionView在更改minItemSize后失去滚动条,直到视图调整大小

NSCollectionView在更改minItemSize后失去滚动条,直到视图调整大小
EN

Stack Overflow用户
提问于 2019-08-06 10:29:45
回答 1查看 271关注 0票数 0

我有一个垂直NSCollectionViewFlowLayoutNSCollectionViewFlowLayout。我在里面显示矩形图标。

我在UI中还有一个滑块,当这种情况发生变化时,我调整minItemSize,然后在collectionView:itemForRepresentedObjectAtIndexPath:中使用它为返回的NSCollectionViewItem's imageView创建大小相等的NSImageView,然后通过调用reloadData重新加载视图。

之后,视图将按预期显示新大小中的图标。

问题是,如果我要显示的数据比适合当前的scoll视图要显示的数据多,那么当通用系统首选项设置为Show滚动条时:当滚动时,滚动条在重新加载集合视图后消失,并且尝试使用触控板滚动会导致反弹,这告诉我滚动视图认为内容只是可见的,没有什么可滚动的。

但是,一旦我调整了窗口的大小(窗口内部也调整了集合视图的大小),滚动条就会返回。

奇怪的是,如果系统Prefs设置为显示滚动条:总是,那么问题就不会出现,滚动始终有效,滚动条始终是可见的。

我尝试了很多东西来触发滚动视图的重新计算,比如使集合视图的布局无效,滚动视图本身,它的内容视图,还试图将它们的needsLayout设置为true。没有什么能起作用的。

更新:潜在的复制 (NSCollectionView does not scroll items past initial visible rect),collectionView.setFrameSize:window.setFrame:建议都不适合我的情况(我尝试在reloadData之前和之后添加这些行)。

即使我强制这样调整窗口的大小,它也不会使滚动条返回,只会手动拖动窗口边缘:

代码语言:javascript
复制
[self.collectionView.window setFrame:NSInsetRect(self.view.window.frame, 1, 1) display:YES];

还请注意,在我的情况下,最初的滚动工作,只是没有在调整大小和重新加载之后。

另一个发现:当我在reloadData之后调用selectItemsAtIndexPaths:scrollPosition:时,滚动条将返回。但是只有当我为路径传递一个非空的NSSet时。由于我可能没有选择任何项目,这不是一个永久的解决方案。

如果没有其他的想法,我将尝试做一个演示项目。

EN

回答 1

Stack Overflow用户

发布于 2019-08-06 14:40:08

我已经解决了:

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

在修复之前,我确实从reloadData处理程序调用了setSliderValue:,该处理程序绑定到滑块的值。这件事似乎不太合拍。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/57374020

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档