Ich benutze Eureka forms. Eine meiner benutzerdefinierten Selektorzeilen präsentiert modal eine andere VC (EditorVC
) im Stil von formSheet
.Wie kann ich programmgesteuert eine Navigationsleiste hinzufügen, die tatsächlich auf den Bildschirm passt?
Ich kann dies tun, indem Sie eine UINavigationController
präsentieren und EditorVC
als Root-VC haben. Dies würde jedoch erfordern, dass ich Daten (nämlich den Wert der Zeile, wenn sich etwas in EditorVC
ändert) zwischen UINavigationController
und EditorVC
weiterleiten muss. Das ist zu beschwerlich für mich.
Aus diesem Grund habe ich programmgesteuert eine Navigationsleiste erstellt.
Ich suchte auf SO und dies ist mein erster Versuch:
myNav = UINavigationBar(frame: CGRect(x: 0, y: 0, width: self.view.width, height: 44))
myNav.barTintColor = #colorLiteral(red: 0.3529411765, green: 0.7333333333, blue: 0.3529411765, alpha: 1)
myNav.titleTextAttributes = [NSForegroundColorAttributeName: UIColor.white]
self.view.addSubview(myNav)
let cancelItem: UIBarButtonItem = UIBarButtonItem(barButtonSystemItem: .cancel, target: self, action: #selector(cancel))
cancelItem.tintColor = #colorLiteral(red: 1, green: 1, blue: 1, alpha: 1)
let doneItem: UIBarButtonItem = UIBarButtonItem(barButtonSystemItem: .done, target: self, action: #selector(done))
doneItem.tintColor = #colorLiteral(red: 1, green: 1, blue: 1, alpha: 1)
let navigItem: UINavigationItem = UINavigationItem(title: "Title")
navigItem.rightBarButtonItem = doneItem
navigItem.leftBarButtonItem = cancelItem
myNav.items = [navigItem]
Wenn ich die App auf einem iPhone laufen, die Navigationsleiste zeigt, wie erwartet, aber wenn ich die Bildschirmausrichtung zu ändern, die Navigationsleiste behält seine Breite bei und deckt somit nicht die gesamte Breite des Bildschirms ab. Auf einem iPad ist die Navigationsleiste zu breit. Es überschreitet die Breite des Formulars, so dass das Element der rechten Leiste nicht sichtbar ist. Der Titel ist auch nicht zentriert. So
Ich habe versucht, Layoutbeschränkungen auf die Navigationsleiste hinzuzufügen:
let top = NSLayoutConstraint(item: myNav, attribute: .top, relatedBy: .equal, toItem: self.view, attribute: .top, multiplier: 1, constant: 0)
let leading = NSLayoutConstraint(item: myNav, attribute: .leading, relatedBy: .equal, toItem: self.view, attribute: .leading, multiplier: 1, constant: 0)
let trailing = NSLayoutConstraint(item: myNav, attribute: .trailing, relatedBy: .equal, toItem: self.view, attribute: .trailing, multiplier: 1, constant: 0)
view.addConstraints([top, leading, trailing])
Aber anscheinend hat es nichts zu ändern. Wenn ich die App starte, passiert genau das Gleiche.
Wie kann ich eine Navigationsleiste erstellen, die immer die Bildschirmbreite anpassen kann? Das muss möglich sein, oder? Denn die UINavigationController
hat es irgendwie geschafft.
die Breite einmal sehen wird in Mainthread aktualisiert oder nicht –