2017-01-16 1 views
1

Ich habe eine seltsame Ansicht innerhalb meiner UICollectionViewCell Unterklasse mit einer direkten Struktur von 2 Bildansichten und 1 Taste.Seltsame UIView in einer UICollectionViewCell erstellt aus der Nib

In Setup() -Methode ich ImageViews einrichten und einige Eigenschaften übergeben. Ich erstelle keine Ansicht oder ändere Selbstuntersichten.

Dann in meinem Viewcontroller ich setupView wie üblich.

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 
} 

Dies ist, wenn seltsame Dinge geschehen. Ich bekomme 4 Unteransichten in meiner Zelle. Auch wenn ich die Ausführung halten direkt nach dem Aufruf:

(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>> 

Wer noch keine Ahnung hat, wo tut, die UIView aus kommen könnte? Es hat einen seltsamen Rahmen (der sich nicht ändert, nachdem die Zelle auf dem Bildschirm erscheint), wobei er alle meine Zelle abdeckt und keine Gesten bis zum Knopf durchlässt. Auch, sehr interessant, warum hat es eine Gestenerkennung?

(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>)>>" 

Antwort

2

Es ist die contentView der Zelle - die documentation sehen.

Ihre Subviews sollten zu der contentView anstatt der Zelle direkt hinzugefügt werden, wo sie derzeit sind. Dies ist passiert, weil Ihre Schreib-Nummer eine Ebene UIView ist, die die Eigenschaft contentView nicht enthält.

Was Sie tun müssen, ist Ihre Feder-Design mit einem UICollectionViewCell Objekt, indem man einfach das entsprechende Objekt in der Interface Builder ziehen:

image

+0

, die Sinn macht. Vielen Dank! Gibt es einen geeigneten Weg, die Zelle in einer Spitze für eine bessere Wiederverwendung einzurichten? – Yaroslav

+0

Ja, entfernen Sie einfach die Vorlage "UIView", die automatisch hinzugefügt wird, und ziehen Sie sie in eine ** Collection View Cell ** aus der Objektbibliothek. Danach können Sie die Eigenschaften der Zelle ändern und andere Objekte in die Hierarchie einfügen, wie Sie es mit einer "UIView" tun würden. – xoudini

Verwandte Themen