Navigationsleiste titleView Ausrichtung
Möchte ich meine navigation bar, um zwei Dinge in der Mitte. Sie werden die Liste der Namen, und der andere wird den Namen der Benutzer. Benutzer-Namen unter eine Liste mit Namen. Was ich bisher getan habe ist, ich habe zwei label und eine superview Programm und legen Sie die titleView
von navigationItem
.
override func viewDidLoad() {
super.viewDidLoad()
var rectForView = CGRect(x: 0, y: 0, width: 190, height: 176)
var viewForTitle = UIView(frame: rectForView)
var rectForNameLabel = CGRect(x: 0, y: 63, width: 190, height: 30)
var listNameLabel = UILabel(frame: rectForNameLabel)
listNameLabel.text = "Name of the List...."
listNameLabel.textAlignment = NSTextAlignment.Center
listNameLabel.font = UIFont(name: "HelveticaNeue-Bold", size: 15)
var rectForListLabel = CGRect(x: 0, y: 93, width: 190, height: 20)
var usersOfListLabel = UILabel(frame: rectForListLabel)
usersOfListLabel.text = "some Users...."
usersOfListLabel.textAlignment = NSTextAlignment.Center
usersOfListLabel.font = UIFont(name: "HelveticaNeue", size: 10)
viewForTitle.addSubview(listNameLabel)
viewForTitle.addSubview(usersOfListLabel)
self.navigationItem.titleView = viewForTitle
Die Sache ist die, ich bin Kommissionierung Breite zufällig, das führt zu alignment-Probleme in verschiedenen Geräten. Wie Sie das erreichen, Mitte, Ausrichtung in meinem Fall?
- Haben Sie versucht, die Einstellung einer NSLayoutConstraint für CenterX?
- Ich nicht. Aber ich habe versucht zu setzen "textForViews" center x-variable "views" (das kommt mit controller) center x-variable
- Durch die Art und Weise, wie add constraint programmatisch?
- versucht, dass man in viewDidload : var constX = NSLayoutConstraint(Artikelnummer: viewForTitle, Attribut: NSLayoutAttribute.CenterX, relatedBy: NSLayoutRelation.Gleich, toItem: Ansicht, Attribut: NSLayoutAttribute.CenterX, Multiplikator: 1, Konstante: 0) viewForTitle.addConstraint(constX) ........ Aber hat nicht funktioniert. Das Programm stürzte ab. Es sagt, "Die view-Hierarchie ist nicht bereit für die Einschränkung:
- aktiviert die Einschränkungen nach schriftlicher Bestätigung Hinzugefügt, wie die Untersicht?
- Ich denke, so. Sie wurden Hinzugefügt, wie die letzten Zeilen in viewDidLoad. Übrigens, wenn Sie sich mit der Frage, werde ich glücklich sein. Ich wirklich wollen, um loszuwerden, dieses problem...
InformationsquelleAutor Salihcyilmaz | 2015-04-26
Schreibe einen Kommentar Antworten abbrechen
Du musst angemeldet sein, um einen Kommentar abzugeben.
Die Sache ist die, navigation titleView versuchen immer das Zentrum Ihrer Ansicht. Der Grund dafür, dass die Titel, die Sie sehen, aus dem Zentrum in einen kleineren Bildschirm, ist, dass die Breite der benutzerdefinierten titleView hat über die maximal Breite von titleView.
Wenn Sie den Wert auf 160, Sie werden sehen, es zentriert für die zweite situation.
Allgemeine Lösung
Wenn Sie anpassen möchten Titel die Breite an verschiedenen Geräten, es gibt ein paar Ansätze, die helfen können, das problem zu lösen.
Unterschiedliche Breite auf unterschiedliche Bildschirm-Breite. Zum Beispiel, wenn die Bildschirmbreite von 320, setzen Sie ihn nicht mehr als 160. Wenn größer als 320, einen Wert zuweisen, basierend auf verschiedenen Bildschirm-Größe. Dies ist keine elegante Lösung, aber ziemlich einfach, ohne den Kopf hämmern in die Einstellung und versuchen, komplizierte constraints.
Berechnen Sie die tatsächliche Breite des titleView. Die Breite der titleView ist bestimmt durch die navigation bar Breite minus Links und rechts barbuttonitem. So etwas wie
Müssen Sie ein wenig Experimentieren, finden Sie die entsprechende Konstante für diese Formel.
Bearbeiten
Ich denke, einen anderen Weg, der vielleicht einfacher für Sie, wenn Sie neu in diesem sind.
Im storyboard finden und drop einen Blick auf diesen view-controller in der Navigationsleiste titleView Bereich.
Erweitern, wie lange Sie die gewünschte Ansicht zu sein.
Drop der beiden labels zu dieser Ansicht, und legen Sie die führende und nachgestellte und Höhe und vertikale Beschränkungen.
, Wie es aussieht auf storyboard
, Wie es läuft auf 4S
Ansatz:
titleView
ist immer zentriertnavigationBar
(Breite -40)Code