Der folgende Code funktioniert über iOS 6:
UIButton *myButton = nil;
myButton = [UIButton buttonWithType:UIButtonTypeCustom];
myButton.bounds = CGRectMake(0,0,44,30);
// setup myButton's images, etc.
UIBarButtonItem *item = nil;
item = [[UIBarButtonItem alloc] initWithCustomView:customButton];
So soll die Schaltfläche ausgerichtet werden:
Unter iOS 7 scheint die Schaltfläche jedoch um zu viele Pixel von rechts oder links versetzt zu sein:
Wie kann ich meine benutzerdefinierten Balkenschaltflächenelemente richtig ausrichten?
uibutton
uinavigationbar
uibarbuttonitem
ios7
uinavigationitem
jaredsinclair
quelle
quelle
Antworten:
Funktioniert bis iOS11!
Sie können negative flexible Leerzeichen und die Eigenschaft rightBarButtonItems anstelle von rightBarButtonItem verwenden:
quelle
UINavigationBar
. Gute Antwort!Um diesen Fehler zu beheben, müssen Sie UIButton in Unterklassen unterteilen, damit Sie ihn überschreiben können
alignmentRectInsets
. Nach meinen Tests müssen Sie je nach Position der Schaltfläche ein UIEdgeInsets 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, AlignmentRectInsets anzupassen.
quelle
@property
für die Position links oder rechts hinzugefügt . Ricardo: Dies ist nur für iOS 7.Ich habe alle oben genannten Antworten ausprobiert und nichts hat bei mir funktioniert. Und hier ist, was funktioniert, wenn jemand dies brauchen würde:
- Sehen Sie sich das Ergebnis an.
quelle
Ok, ich bin in die andere "Richtung" gegangen. Ich habe alles über Storyboard mit iOS 7 richtig ausgerichtet (vorausgesetzt, es wird weiterhin so funktionieren). Und dann unter Verwendung des Beschreibungsunterklassenansatzes unterschreibe ich die Unterklasse
UIButton
mit der folgenden Implementierung.Dieser Code wird also nur ausgeführt, wenn das Gerät vor iOS 7 ist.
Danke für den Einblick @jaredsinclair!
quelle
@jaredsinclair
Hier ist ein Blick auf meinen Code.
Sehen Sie etwas, das nicht richtig ist?
Hier ist das Ergebnis. Das zweite Bild ist nicht so sichtbar, weil ich den Screenshot zeitlich aufnehmen musste und er sich noch im Übergang befindet, aber Sie können deutlich sehen, wie er nicht richtig versetzt ist.
Gutes normales Bild:
Schlechtes Versatzbild:
Nach etwa einer halben Sekunde kehrt das Bild zum ursprünglichen Bildort zurück.
Hier ist mein Code für NavButton.h und .m:
quelle
Eine bessere Lösung ohne springende Tasten finden Sie hier:
Benutzerdefinierte UIBarButtonItem-Ausrichtung mit iOS7 deaktiviert
quelle
Kein großer Fan von Unterklassen
UIButton
oder Methoden, die aus Marius 'Antwort hervorgehen: https://stackoverflow.com/a/19317105/287403Ich habe nur einen einfachen Wrapper verwendet und das x des Rahmens der Schaltfläche in eine negative Richtung verschoben, bis ich die richtige Position gefunden habe. Das Tippen auf die Schaltfläche scheint ebenfalls in Ordnung zu sein (obwohl Sie die Breite der Schaltfläche bei Bedarf an den negativen Versatz anpassen können).
Hier ist der Code, mit dem ich einen neuen Zurück-Button generiere:
quelle
Ich möchte zu @jaredsinclair eine bestätigte Antwort hinzufügen. Die folgenden Überschreibungsmethoden gelten für diejenigen, deren Navigationsschaltfläche Text und / oder Bild enthält. Andernfalls werden Text und Bild nicht ausgerichtet (nur das Hintergrundbild):
ps das makro ist:
quelle
* Lösung gefunden, lesen Sie am Ende der Antwort. * *
@jaredsinclair
Ich habe einen ähnlichen Fall wie Kyle Begeman
Dies ist die Schaltfläche
und ich benutze es in diesem Fall
Alles sieht gut aus, außer dass sich die Schaltfläche neu positioniert, wenn ich zur vorherigen VC zurückkehre. Wie ein kleiner Sprung. Für mich springt es sofort nicht nach einer Sekunde. Und es passiert, nachdem ich die popVC von NavigationViewController aus gemacht habe.
Edit: Die Antwort unten, die Swizzling-Methode von Marius hat mir auch geholfen.
quelle
Ich habe mir eine verkürzte Version von Jaredsinclairs Ansatz ausgedacht:
Klappt wunderbar.
quelle
In iOS 7 können Sie einfach einen Dummy-Barbutton hinzufügen, um den linken Platz zu fixieren. Sie sollten den Dummy als ersten und den rechten als letzten hinzufügen
Beispiel für links: Fügen Sie dies nach dem Festlegen Ihrer Originalelemente oder in viewdidload hinzu, wenn Sie Schaltflächen mithilfe des Storyboards festlegen.
quelle
Es wird einfach angepasst
imageEdgeInsets
, um diesen Fehler zu beheben.Versuche dies.
quelle
Getestet in iOS 11
quelle
2018, iOS 11+, Swift 4.x, das hat bei mir funktioniert.
Kombinieren Sie die Top-Antworten:
Eigentum
In
viewDidLoad
:quelle
Ändern Sie Folgendes für Ihre
UIButton
quelle