Ich habe früher iOS 6.1 verwendet, bin jetzt aber zu iOS 7 übergegangen. Zusammen mit anderen Problemen habe ich festgestellt, dass in meiner Navigationsleiste der linke Bereich des linken Balkenschaltflächenelements und der rechte leere Bereich des rechten Schaltflächenleistenelements recht groß sind mehr in IOS 7 als in iOS 6.
Ich muss wissen, ob es eine Möglichkeit gibt, Leerzeichen von Schaltflächenelementen in der linken und rechten Leiste in der Navigationsleiste zu reduzieren.
Danke im Voraus.
ios
iphone
ios7
uinavigationbar
uibarbuttonitem
Salman Zaidi
quelle
quelle
Antworten:
Ich war auch mit diesem Problem konfrontiert. Ich habe auch das Gefühl, dass in iOS 7 mehr Platz vorhanden ist. Und ich habe herausgefunden, dass dies ungefähr 10 Punkte mehr sind. Normalerweise verwende ich negative Leerzeichen, wenn ich
LeftBarItemButton
am Rand beginnen möchte . Dies kann auch für Sie nützlich sein.quelle
Basierend auf @C_X seiner Antwort habe ich eine Kategorie erstellt, die das UIBarButtonItem basierend auf der iOS-Version des aktuellen Geräts hinzufügt und positioniert.
In Ihrem View Controller können Sie jetzt
[self.navigationItem addLeftBarButtonItem:leftBarButtonItem];
und verwenden[self.navigationItem addRightBarButtonItem:rightBarButtonItem];
Ich habe auch versucht, Unterklassen zu erstellen
UIButton
und zu überschreiben,-alignmentRectInsets
aber dies gab mir Probleme mit Übergängen zwischen Ansichten.quelle
Für Swift 2.0 war dies meine Lösung, um den folgenden Effekt zu erzielen ...
(Die tatsächlichen Werte können je nach Situation unterschiedlich sein.)
Swift 2.2 UPDATE:
Für Swift 2.2 hat sich die
action: Selector
Methode geändert und sollte wie folgt eingegeben werdencaptureButton.addTarget(self, action: #selector(YourViewController.showCaptureDetailsForm(_:)), forControlEvents: .TouchUpInside)
quelle
Dies ist meine Lösung für
Swift 3.0
:quelle
Um diesen Fehler zu beheben, müssen Sie eine Unterklasse
UIButton
erstellen, damit Sie diese überschreiben könnenalignmentRectInsets
. Nach meinen Tests müssen Sie je nach Tastenposition aUIEdgeInsets
mit einem positiven Versatz nach rechts oder einem positiven Versatz nach links zurückgeben. Diese Zahlen ergeben für mich keinen Sinn (mindestens eine davon sollte nach gesundem Menschenverstand negativ sein), aber genau das funktioniert:Besonderer Dank geht an @zev für den Vorschlag, mich anzupassen
alignmentRectInsets
.quelle
Dem Beispiel von smek folgend, habe ich eine Kategorie erstellt, diese jedoch geändert, um Abwärtskompatibilität und nicht Vorwärtskompatibilität zu gewährleisten. Ich richte alles so ein, wie es in iOS 7 funktioniert, und wenn der Benutzer etwas niedrigeres ausführt, fange ich an, mich mit Dingen zu beschäftigen.
Und um dies global zu erhalten, habe ich eine dünne
UIViewController
Unterklasse, von der alle meine View-Controller erben.Mir ist klar, dass ich die Betriebssystemversion zweimal überprüfe (immer
INFViewController
wieder in der Kategorie). Ich habe sie in der Kategorie belassen, falls ich sie irgendwo im Projekt einmalig verwenden möchte.quelle
für schnell können Sie dies tun
quelle
quelle
Swift 3:
quelle
Swift 3.1
So geben Sie dem Element der linken Leistenschaltfläche einen negativen Platz:
quelle
quelle
Ich glaube, Sie müssen eine benutzerdefinierte Schaltfläche mit einer
UIButton
Unterklasse verwenden und in Ihrer Unterklasse überschreiben-alignmentRectInsets
. Ich habe vergessen, ob Sie einen positiven oder negativen Wert für die entsprechende Flanke benötigen, damit sie richtig verschoben wird. Wenn jedoch eine nicht funktioniert, versuchen Sie es mit der anderen.quelle
arbeitete für mich
quelle
Gute Entscheidung, vielen Dank! Ich musste nur zwei Elemente auf der linken Seite des Navigationsheaders hinzufügen. Das ist meine Lösung:
quelle