2017-12-25 3 views
0

enter image description hereBenutzerdefinierte Tableiste iOS

Ich möchte eine benutzerdefinierte Tableiste erstellen, wie das Bild zeigt. Ich weiß nicht, wie man mit der Unterklasse UITabBar beginnt, um dieses Ergebnis zu erhalten. Was, wenn ich einfach eine Wurzel haben UIViewController, und erstellen Sie die Wahrnehmung der Tab-Leiste durch interface builder (ein UIView, Bilder, Kreis-Taste, etc) und fügen ContainerView 's für Karte und Liste UIViewController' s? Was sind die Nachteile für diesen Ansatz, wenn überhaupt? Größenänderungsfehler (sieht auf dem iPhone 6 gut aus, aber nicht auf dem iPhone X), da es keine Tab-Leiste gibt, um die Größe dynamisch zu ändern?

Antwort

0

Wenn Sie eine UIKit Komponente in ihre Teile zerlegen, wie UITabBar, werden Sie nur die gleichen UIKit Komponenten finden, die wir alle verwenden dürfen. Manchmal ist es schön, Apples Sachen zu benutzen, weil wir wissen, dass es jedes Mal funktioniert. Aber manchmal ist es nicht so schön, Apples Sachen zu benutzen, weil sie nicht immer mögen, dass sie sich in ihre vorgefertigten Komponenten einmischen, und sie verbergen oft genau die Verhaltensweisen, die Sie vielleicht ändern wollen.

Also, wenn Sie wissen, was Sie tun, oder sehr bereit sind zu lernen, würde ich dringend vorschlagen, keine Angst vor der Erstellung Ihrer eigenen Sachen, wie eine benutzerdefinierte Tab-Leiste, die für Ihre Zwecke wahrscheinlich nicht mehr als eine UIView mit entweder UIButton Unteransichten oder andere UIView Unteransichten mit TAP-Gestenerkennung an ihnen. Wenn Sie einen Masterview-Controller haben, der Ihr Containeransicht-Controller ist, in dem sich die Kindansichtscontroller befinden, platzieren Sie die Tableiste im Master und Sie haben eine legitime Tableiste, die immer über alles auf dem Bildschirm eingeblendet wird. Das ist genau das Verhalten, das wir wollen).

Und so weit wie iPhone X betroffen ist und sichere Bereiche, so dass sie nur anwenden, wie Sie es normalerweise jede Ansicht weil das alle Ihre benutzerdefinierten Tab-Leiste ist:

if #available(iOS 11.0, *) { 

    tabBar.leadingAnchor.constraint(equalTo: view.safeAreaLayoutGuide.leadingAnchor).isActive = true 
    tabBar.widthAnchor.constraint(equalTo: view.safeAreaLayoutGuide.widthAnchor).isActive = true 
    tabBar.bottomAnchor.constraint(equalTo: view.safeAreaLayoutGuide.bottomAnchor).isActive = true 

} else { 

    tabBar.leadingAnchor.constraint(equalTo: view.leadingAnchor).isActive = true 
    tabBar.widthAnchor.constraint(equalTo: view.widthAnchor).isActive = true 
    tabBar.bottomAnchor.constraint(equalTo: bottomLayoutGuide.topAnchor).isActive = true 

} 
tabBar.heightAnchor.constraint(equalToConstant: 44).isActive = true 

Und Ihre Sorge um die Größenänderung, wenn Sie Geben Sie Ihre Tab-Bar-Einschränkungen (wie Sie es ohnehin tun sollten) in der Master-Ansicht-Controller, wird es strecken und rotieren in jeder möglichen Weise ohne Fehler.