Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/swift/20.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Swift 集合视图项重叠_Swift_Cocoa_Nscollectionview - Fatal编程技术网

Swift 集合视图项重叠

Swift 集合视图项重叠,swift,cocoa,nscollectionview,Swift,Cocoa,Nscollectionview,我正在尝试设置一个具有垂直方向的流布局的NSCollectionView。为了快速测试数据源,我将分别从collectionView(\uu:numberofitemsinssection:)和collectionView(\uu:itemForRepresentedObjectAtIndexPath:)返回静态数字和视图 方法如下: func collectionView(collectionView: NSCollectionView, numberOfItemsInSection sect

我正在尝试设置一个具有垂直方向的流布局的NSCollectionView。为了快速测试数据源,我将分别从
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间距)一起工作吗?

我仍然不确定到底是什么问题,但下面是我为解决它所做的:

  • 创建一个具有关联xib的NSCollectionViewItem子类(让我们调用子类
    Item
  • 在interface builder中将集合视图项添加到文档大纲中
  • 将集合视图项的类更改为我的自定义子类(
    Item
  • collectionView(u:itemForRepresentedObjectAtIndexPath:)中的代码更改为以下代码:

  • 现在,我不仅有视图布局,因为他们应该,但他们是自定义的,而不仅仅是灰色框!下面的教程帮助我解决了这个问题


    如果有人想尝试解释实际的问题是什么,我会把这个问题留着,接受一些事实上能回答这个问题的东西。

    我遇到了同样的问题,假设是同样的问题影响到你,我也找到了解决办法

    当NSCollectionViewItem子类的多个实例最终配置为针对同一项视图时,就会出现上述症状。我遇到这个问题的方式非常简单,因为我试图建立一个基于类的项目,但它有一个xib支持。大概是这样的:

  • 创建一个新的NSCollectionViewItem子类,指定一个nibName和nibBundle
  • 创建新的NSView nib
  • 将集合视图实例拖出,并将其出口连接到视图
  • 将文件的所有者类设置为子类名称
  • 将出口连接从文件的所有者代理拖动到视图
  • 在代码中,使用NSCollectionView.register(类:…)设置项
  • 现在,由于默认的NSViewController机制,您已经有了一个可以实例化并自加载其nib的类。但是,当您这样做时,它还将实例化另外一个也指向视图的NSCollectionViewItem实例

    我的理论是,第二个伪造的视图项实例在重新布局时会被用于视图定位,它默认为0-0索引路径,从而导致在相同位置绘制每个关联视图


    修复方法是删除xib中的假顶层视图项,或者切换到使用基于寄存器(nib:…)的方法。

    您对此有过更多了解吗?我的自定义视图被调用,但它们都是重叠的!我没有,对不起!还有,你是怎么做的?那真的很酷。。。虽然这无助于解决重叠问题,但它被称为调试视图层次结构。看看这个:
    func collectionView(collectionView: NSCollectionView,
                        itemForRepresentedObjectAtIndexPath indexPath: NSIndexPath) -> NSCollectionViewItem {
      return collectionView.makeItemWithIdentifier("Item", forIndexPath: indexPath)
    }