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
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>)>>"
, die Sinn macht. Vielen Dank! Gibt es einen geeigneten Weg, die Zelle in einer Spitze für eine bessere Wiederverwendung einzurichten? – Yaroslav
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