2016-08-27 3 views
3

Я пытаюсь настроить NSCollectionView с раскладкой потока в вертикальной ориентации. Чтобы быстро протестировать источник данных, я возвращаю статические числа и представления из collectionView(_:numberOfItemsInSection:) и collectionView(_:itemForRepresentedObjectAtIndexPath:) соответственно.Collection View items overlapping

Вот методы:

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% непрозрачности. Когда я запускаю приложение, он помещает оба представления друг на друга.

app screenshot showing a single dark gray square

Вот разобранном показывает обе точки зрения:

enter image description here

Каждый элемент установлен, чтобы иметь размер 50х50, а минимальный интервал 10 в каждом направлении.

Что мне не хватает? Что делает эти взгляды разнесенными друг от друга? В номере documentation указано:

Обычно вы указываете размер элементов и их интервалы, используя свойства этого класса. Если вы хотите настроить значения для своих элементов, реализуйте методы протокола NSCollectionViewDelegateFlowLayout в объекте, назначенном в качестве делегата представления коллекции.

Я не внедряю этот делегат, поэтому не должен ли он работать со значениями, которые я ввел в построитель интерфейса (50x50 и 10 интервалов)?

+0

также, как вы взорвались? это действительно круто ... хотя это не помогает моей проблеме перекрытия – tofutim

+0

Это называется иерархией просмотра отладки. Проверьте это: https://stackoverflow.com/questions/28657634/xcode-cant-find-debug-view-hierarchy-button#28658019 –

ответ

0

Я до сих пор не уверен, что именно эта проблема, но вот то, что я сделал, чтобы исправить это:

  1. Создайте подкласс NSCollectionViewItem с ассоциированной XIb (назовем подкласс Item)
  2. Добавить Коллекция Просмотреть элемент в схему документа в интерфейсе строителя
  3. Изменить класс Collection View Пункт для моего пользовательского подкласса (Item)
  4. Измените код в collectionView(_:itemForRepresentedObjectAtIndexPath:) на следующее:

func collectionView(collectionView: NSCollectionView, 
        itemForRepresentedObjectAtIndexPath indexPath: NSIndexPath) -> NSCollectionViewItem { 
    return collectionView.makeItemWithIdentifier("Item", forIndexPath: indexPath) 
} 

Теперь я не только виды укладки, как они должны, но они на заказ и не только серые коробки! После this учебник помог мне решить проблему.

Если кто-то хочет взять удар, чтобы объяснить, что представляет собой настоящая проблема, я оставлю это открытым и соглашусь с тем, что на самом деле отвечает на вопрос.

+0

Вы когда-нибудь узнали об этом? мой пользовательский вид вызывается, но все они перекрываются! – tofutim

+0

Я не сделал, извините! –