webentwicklung-frage-antwort-db.com.de

Benutzerdefinierte Titelansicht als großer Titel in der neuen Navigationsleiste von iOS 11

Ich verwende eine Schaltfläche als Titelansicht für meine UITableViewController-Datei, die eine Dropdown-Liste mit Kategorien öffnet. Durch Auswahl einer Kategorie wird der Inhalt der Tabellenansicht nach der ausgewählten Kategorie gefiltert.

Die Schaltfläche zeigt den Namen der ausgewählten Kategorie und einen kleinen Pfeil, ähnlich wie iBooks früher aussah (oder vielleicht immer noch aussieht? Ich habe es seit einiger Zeit nicht mehr verwendet). Ich möchte daher, dass er dasselbe Verhalten wie ein Standardtitel hat und zunächst groß ist und beim Scrollen der Tabellenansicht kollabiert.

Gibt es eine Möglichkeit, dies zu tun?

Vielen Dank

7
Denis Balko

Aufgrund der neuen großen Titel scheint es, dass IOS11 die Einschränkungen für die benutzerdefinierte Ansicht in der navigationItem.titleView setzt. 

Tun Sie dies zum Beispiel: 

customView.widthAnchor.constraint(equalToConstant: 200).isActive = true
customView.heightAnchor.constraint(equalToConstant: 44).isActive = true

self.navigationItem.titleView = customView

Beachten Sie, dass dies sowohl für die Breite als auch für die Höhe erfolgen muss. 

Es sollte funktionieren. Es ist nicht nötig, einen Button hinzuzufügen, zumindest in meinem Fall ...

Dies wurde von Apple vorgeschlagen, um sicherzustellen, dass Sie keine benutzerdefinierten Ansichten mit Nullgröße haben. Siehe Folie 33 in https://developer.Apple.com/videos/play/wwdc2017/204/

5
iAmcR

Sieht aus, als wären Berührungen für navigationItem.titleView defekt. Gesten, Tippen Sie auf Ereignisse und Schaltflächen - nichts funktioniert

4

Scheint wie ein Fehler in iOS 11: https://forums.developer.Apple.com/thread/82466

Ich habe diesen Workaround vorläufig implementiert:

    private lazy var navBarActionButtonIOS11: UIButton = {
        button.addTarget(self.navTitleView, action: #selector(self.navTitleView.didTapView), for: .touchUpInside)
        return button
    }()

[...]

        navigationItem.titleView = navTitleView
        if #available(iOS 11.0, *), let navBar = navigationController?.navigationBar {
            navBarActionButtonIOS11.removeFromSuperview()
            navBar.addSubview(navBarActionButtonIOS11)
            navBarActionButtonIOS11.center.x = navBar.center.x
        }

Eine andere Lösung könnte darin bestehen, einfach einen UIButton direkt zu navigationItem.titleView zuzuweisen.

Ich hoffe, Apple korrigiert dies bald!

2
Juan F. Sagasti

Nun, ich hatte das gleiche Problem. Ich habe UIButtons in UINavigationItem.titleView und diese reagierten überhaupt nicht auf Berührungen. Problem ist, dass die Ansicht, in der sich diese Schaltflächen befinden, die Größe (0,0) aufgrund des automatischen Layouts hat. Um dieses Problem zu beheben, müssen Sie Ihrer benutzerdefinierten Ansicht eine zusätzliche Ansicht hinzufügen. Lassen Sie uns "contentView" nennen und alle Steuerelemente in diese contentView einfügen. Für contentView muss außerdem die Größe mit Einschränkungen definiert sein. Der Schnelltest ist das Hinzufügen von Breiten- und Höhenbeschränkungen zu contentView. Und alles funktioniert wieder.

Hoffe, das hilft jemandem.

1
Juraj Antas