Wie mache ich ein UISegmentedControl
als Teil eines UINavigationBar
darunter? Ist es mit dem Internet verbunden UINavigationBar
oder ist es eine komplette separate Ansicht gerade hinzugefügt als Subview der UINavigationController
‚s View - Controller. Sieht so aus, als wäre es Teil von, UINavigationBar
da sich unter der Leiste ein Schatten befindet.
ios
uinavigationbar
uisegmentedcontrol
Yoeriboven
quelle
quelle
Antworten:
Es ist ein einfacher Effekt.
Platzieren Sie zunächst ein Segment in einer Symbolleiste. Platzieren Sie diese Symbolleiste direkt unter der Navigationsleiste. Stellen Sie den Delegaten der Symbolleiste auf Ihren Ansichts-Controller ein und kehren Sie
UIBarPositionTopAttached
zurückpositionForBar:
. Wenn Sie in der Store-App eine interaktive Pop-Geste ausführen, können Sie feststellen, dass sich die Segmentleiste nicht wie die Navigationsleiste bewegt. Das liegt daran, dass sie nicht die gleiche Bar sind.Nun den Haaransatz entfernen. Der "Haaransatz" ist
UIImageView
eine Unteransicht der Navigationsleiste. Sie können es finden und als versteckt festlegen. Dies tut Apple beispielsweise in seiner nativen Kalender-App sowie in der Store-App. Denken Sie daran, es anzuzeigen, wenn die aktuelle Ansicht verschwindet. Wenn Sie ein wenig mit den Apple Apps spielen, werden Sie feststellen, dass der Haaransatz ausgeblendetviewWillAppear:
und in angezeigt istviewDidDisappear:
.Um den Stil der Suchleiste zu erreichen, setzen Sie einfach die Leiste
searchBarStyle
aufUISearchBarStyleMinimal
.quelle
initWithRect: CGRectMake(0, self.toplayoutGuide.length, 320, 44)
oder ihn mithilfe des automatischen Layouts positionieren? Was wird die neue Spitze der childViews seinself.toplayoutGuide.length + 44
?Ein anderer Ansatz wäre, nach dem Haaransatz zu suchen und ihn unter die hinzugefügte Symbolleiste zu verschieben. Folgendes habe ich mir ausgedacht.
Ich fand auch das Apple NavBar-Codebeispiel (Anpassen der UINavigationBar) sehr hilfreich, um dieses Problem zu beheben.
Seien Sie auch sicher Achten Sie den oberen Rand der UIToolbar behandeln. Dieser wird möglicherweise angezeigt und Sie können ihn mit dem Haaransatz der NavBar verwechseln. Ich wollte auch, dass die UIToolbar genau wie die NavBar aussieht.
barTintColor
Dann möchten Sie wahrscheinlich die Symbolleisten anpassen .quelle
Hier ist ein protokollorientierter Swift-Ansatz für dieses spezielle Problem, der auf der akzeptierten Antwort basiert:
HideableHairlineViewController.swift
SampleViewController.swift
quelle
shadowImage
Eigentum der Navigationsleiste.Die Navigationsleiste mit UISegmentedControl finden Sie im Apple-Beispielcode: https://developer.apple.com/library/ios/samplecode/NavBar/Introduction/Intro.html
Oder Sie können es programmgesteuert erstellen. Hier ist der Code in meiner Antwort im anderen Thread. Fügen Sie der Navigationsleiste ein segmentiertes Steuerelement hinzu und behalten Sie den Titel mit den Schaltflächen bei
quelle
Ich wollte das Gleiche tun. Und bekam Folgendes:
1 - Unterklasse UINavigationBar
2 - Stellen Sie Ihren NavigationController mit Unterklasse ein
3 - Fügen Sie Ihr UISegmentedControl in die Navigationsleiste ein
4 - Run and Fun -> Vergessen Sie nicht, auf beiden die gleiche Farbe zu verwenden
Suchquelle:
UINavigationBar hacken
SO Frage
quelle
UINavigationButton
es sich um eine private API handelt und Ihre App für die Verwendung abgelehnt wird. Sie sollten versuchen, die Verwendung dieser Klasse zu maskieren.Apple hat speziell dafür eine Beispiel-App. Es wird beschrieben, wie Sie ein transparentes Schattenbild und ein farbiges Hintergrundbild für die Navigationsleiste festlegen und eine Ansicht unter der Navigationsleiste konfigurieren. Es enthält auch Beispiele für andere Anpassungen der Navigationsleiste.
Siehe https://developer.apple.com/library/ios/samplecode/NavBar/Introduction/Intro.html
quelle
Ich habe versucht, den Haaransatz mit @ Simons Methode zu entfernen, aber es hat nicht funktioniert. Ich mache wahrscheinlich etwas falsch, weil ich super noob bin. Anstatt die Zeile zu entfernen, können Sie sie einfach mithilfe des
hidden
Attributs ausblenden . Hier ist der Code:Hoffe das hilft jemandem!
quelle
UISegmentedControl unterhalb der UINavigationbar in schnellem 3/4
Einzelheiten
Xcode 9.2, schnell 4
Vollständige Probe
Ergebnisse
quelle
UINavigationController
?Es gibt viele Möglichkeiten, das zu tun, was Sie gefragt haben. Am einfachsten ist es natürlich, es einfach im Interface Builder zu erstellen, aber ich gehe davon aus, dass Sie dies nicht im Sinn hatten. Ich habe ein Beispiel für das Bild erstellt, das Sie oben gepostet haben. Es ist nicht genau das Gleiche, aber Sie können mit den zahlreichen Eigenschaften spielen, um das Erscheinungsbild dessen zu erhalten, wonach Sie suchen.
In der ViewController.h
In der ViewController.m
quelle
displaySearchBarInNavigationBar ist die Möglichkeit, eine Suchleiste sowie deren Bereichsleiste in der Navigationsleiste anzuzeigen.
Sie müssen nur die Suchleiste ausblenden, wenn Sie einen benutzerdefinierten Titel anzeigen
quelle