Swift 集合视图项重叠
我正在尝试设置一个具有垂直方向的流布局的NSCollectionView。为了快速测试数据源,我将分别从Swift 集合视图项重叠,swift,cocoa,nscollectionview,Swift,Cocoa,Nscollectionview,我正在尝试设置一个具有垂直方向的流布局的NSCollectionView。为了快速测试数据源,我将分别从collectionView(\uu:numberofitemsinssection:)和collectionView(\uu:itemForRepresentedObjectAtIndexPath:)返回静态数字和视图 方法如下: func collectionView(collectionView: NSCollectionView, numberOfItemsInSection sect
collectionView(\uu:numberofitemsinssection:)
和collectionView(\uu:itemForRepresentedObjectAtIndexPath:)
返回静态数字和视图
方法如下:
func collectionView(collectionView: NSCollectionView, numberOfItemsInSection section: Int) -> Int {
return 2
}
func collectionView(collectionView: NSCollectionView,
itemForRepresentedObjectAtIndexPath indexPath: NSIndexPath) -> NSCollectionViewItem {
let item = NSCollectionViewItem()
let view = NSView()
item.view = view
view.wantsLayer = true
view.layer?.backgroundColor = CGColorCreateGenericGray(0, 0.5)
view.translatesAutoresizingMaskIntoConstraints = false
view.widthAnchor.constraintEqualToConstant(100).active = true
view.heightAnchor.constraintEqualToConstant(100).active = true
return item
}
基本上,我总是返回2个NSCollectionViewItems,它们都是黑色,不透明度为50%。当我运行应用程序时,它将两个视图放在彼此的顶部
这是一个分解图,显示了两种视图:
每个项目的尺寸设置为50x50,每个方向的最小间距为10
我错过了什么?是什么使这些视图彼此隔开?在报告中,它说:
通常,可以使用此类的属性指定项目的大小及其间距。如果要自定义项的值,请在指定为集合视图的委托的对象中实现NSCollectionViewDelegateFlowLayout协议的方法
我没有实现这个委托,所以它不应该与我在interface builder中输入的值(50x50和10间距)一起工作吗?我仍然不确定到底是什么问题,但下面是我为解决它所做的:
Item
)Item
)collectionView(u:itemForRepresentedObjectAtIndexPath:)中的代码更改为以下代码:
现在,我不仅有视图布局,因为他们应该,但他们是自定义的,而不仅仅是灰色框!下面的教程帮助我解决了这个问题
如果有人想尝试解释实际的问题是什么,我会把这个问题留着,接受一些事实上能回答这个问题的东西。我遇到了同样的问题,假设是同样的问题影响到你,我也找到了解决办法 当NSCollectionViewItem子类的多个实例最终配置为针对同一项视图时,就会出现上述症状。我遇到这个问题的方式非常简单,因为我试图建立一个基于类的项目,但它有一个xib支持。大概是这样的:
修复方法是删除xib中的假顶层视图项,或者切换到使用基于寄存器(nib:…)的方法。您对此有过更多了解吗?我的自定义视图被调用,但它们都是重叠的!我没有,对不起!还有,你是怎么做的?那真的很酷。。。虽然这无助于解决重叠问题,但它被称为调试视图层次结构。看看这个:
func collectionView(collectionView: NSCollectionView,
itemForRepresentedObjectAtIndexPath indexPath: NSIndexPath) -> NSCollectionViewItem {
return collectionView.makeItemWithIdentifier("Item", forIndexPath: indexPath)
}