iOS10 - Blockierung der Inhalte von UIButton in UITableView Header

9

Ich bin dabei, meine App mit Swift 2.3 und Xcode 8 Beta 1 auf iOS10 zu aktualisieren und habe festgestellt, dass es eine UITableViewHeaderFooterContentView gibt, die Berührungen der UIButton in meiner Unterklasse von UITableViewHeaderFooterView blockiert.

Auf dem Xcode 8 Beta 1 Simulator funktioniert die UIButton auf iOS9.3, aber nicht auf iOS10.

1) Gibt es dafür Unterlagen?

2) Wie kann ich sicherstellen, dass meine UI-Elemente auf der neuen Inhaltsansicht in iOS10 stehen? (oder erlauben Sie Berührungen durch UITableHeaderFooterContentView )

Danke!

Tabellenkopf

%Vor%

Codeansichtscontroller dateCell.addNewEventButton ist die UIButton, die keine Berührungen mehr in iOS10 empfängt

%Vor%     
Andrew Varvel 19.06.2016, 03:49
quelle

1 Antwort

5

Die problematische Ansicht ist tatsächlich contentView von UITableViewHeaderFooterView (siehe Apple Docs ). Sie sollten also sendSubview(toBack:) verwenden können, um die Berührungen zu vermeiden.

Allerdings scheint es, dass UITableViewHeaderFooterView unter iOS9 den contentView nicht korrekt initialisiert, wenn die Ansicht von einer NIB geladen wird. Obwohl die Eigenschaft contentView nicht optional ist, ist sie tatsächlich null, und Sie erhalten einen BAD ACCESS-Fehler, wenn Sie versuchen, darauf zuzugreifen. Sie können auch keinen Wert für contentView (entweder im Code oder als Outlet in IB) festlegen, da es sich um eine schreibgeschützte Eigenschaft (*) handelt. Die einzige Lösung, an die ich denken kann, ist die Verwendung von #available , um Code zu verwenden, um contentView nach hinten zu verschieben, wenn Sie mit iOS 10 oder neuer arbeiten. Ich würde den relevanten Code in deine Unterklasse einfügen:

%Vor%

(*) Da ich mich auf wilde Spekulationen einlasse, vermute ich, dass Apple den Code UITableViewHeaderFooterView stark auf UITableViewCell basierte. Da IB UITableViewCells in seiner Objektbibliothek hat (und beachten Sie, dass diese die contentView der Zelle enthalten), kann sichergestellt werden, dass die contentView der Zelle korrekt instanziiert wird. Aber da es in der Objektbibliothek kein UITableViewHeaderFooterView gibt, gibt es keine Möglichkeit, das contentView korrekt zu laden. Offenbar haben sie es in iOS10 behoben, indem sie eine leere contentView instanziiert haben. Schade, sie haben auch nicht UITableViewHeaderFooterView zur Bibliothek hinzugefügt.

    
pbasdf 27.06.2016, 19:39
quelle

Tags und Links