2017-01-16 9 views
1

У меня есть странный вид, появляющийся внутри моего подкласса UICollectionViewCell с простой структурой из 2 изображений и 1 кнопки.Странный UIView в UICollectionViewCell, созданный из nib

final class ProfileImageCell:UICollectionViewCell { 
    static var name: String { return "ProfileImageCell" } 
    @IBOutlet weak var imageView: UIImageView! 
    @IBOutlet weak var anotherImageView: UIImageView! 
    func setup(...) { ... } 
    @IBAction func buttonAction(_ sender: UIButton) { ... } 
} 

В методе setup() я настроил imageViews и передал несколько свойств. Я не создаю никаких представлений или не изменяю самоподзовы.

Тогда в моем контролере зрения я устанавливаю collectionView как обычно.

collectionView.register(UINib(nibName: ProfileImageCell.name, bundle: nil), forCellWithReuseIdentifier: ProfileImageCell.name) 

ProfileImageCell.xib

xib structure

func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell { 
    let cell = collectionView.dequeueReusableCell(withReuseIdentifier: ProfileImageCell.name, for: indexPath) as! ProfileImageCell 
    cell.setup(...) 
    return cell 
} 

Это когда происходят странные вещи. Я получаю 4 subviews в своей камере. Даже если остановить выполнение сразу после вызова:

(lldb) po cell.subviews 
▿ 4 elements 
    - 0 : <UIImageView: 0x1026bac00; frame = (0 0; 375 667); autoresize = RM+BM; userInteractionEnabled = NO; layer = <CALayer: 0x170236dc0>> 
    - 1 : <UIImageView: 0x1026bade0; frame = (263 0; 112 112); autoresize = RM+BM; layer = <CALayer: 0x170237160>> 
    - 2 : <UIButton: 0x1026ba4d0; frame = (263 0; 112 112); opaque = NO; autoresize = RM+BM; layer = <CALayer: 0x170237140>> 
    - 3 : <UIView: 0x102732cb0; frame = (0 0; 600 600); gestureRecognizers = <NSArray: 0x17444e430>; layer = <CALayer: 0x174238aa0>> 

Каждый имеет ни малейшего представления, где делает , что UIView может исходить от? У этого есть странный кадр (который не изменяется после того, как ячейка появляется на экране), покрывая всю мою ячейку и не пропуская никаких жестов к кнопке. Кроме того, очень интересно, почему у него есть распознаватель жестов?

(lldb) po cell.subviews[3].gestureRecognizers?.first?.description 
▿ Optional<String> 
    - some : "<UILongPressGestureRecognizer: 0x10271db10; state = Possible; view = <UIView 0x102732cb0>; target= <(action=_handleMenuGesture:, target=<Application.ProfileImageCell 0x1026ba790>)>>" 

ответ

2

Это contentView клетки - см documentation.

Ваши подзадачи должны быть добавлены к contentView, а не к ячейке напрямую, где они в настоящее время. Это произошло потому, что ваш nib - это простой UIView, который не содержит свойства contentView.

Что вам нужно сделать, это создать свой наконечник с UICollectionViewCell объекта, просто перетащив соответствующий объект в интерфейс строитель:

image

+0

Это имеет смысл. Спасибо! Есть ли способ настроить ячейку в наконечнике для лучшего повторного использования? – Yaroslav

+0

Да, просто удалите шаблон 'UIView', который добавляется автоматически и перетаскивает в ** Collection View Cell ** из библиотеки объектов. После этого вы можете изменить свойства ячейки и добавить другие объекты в иерархию, как и с 'UIView'. – xoudini