2016-05-08 12 views
0

I UINavigationBar programmatisch diesen Code in viewDidLoad()Wie Polsterung in den UIBarButtonItem programmatisch

let navbar = UINavigationBar(frame: CGRect(x: 0, y: 0, width: self.view.frame.size.width, height: 59.0)) 
    self.view.addSubview(navbar) 

mit hinzugefügt und dann habe ich mit zwei Tasten, die ich diesen Code verwenden müssen:

let item = UINavigationItem() 
    item.leftBarButtonItem = UIBarButtonItem(title: "Back", style: .Done, target: self, action: #selector(CollectionCollectionViewController.goBack(_:))) 

    item.rightBarButtonItem = UIBarButtonItem(barButtonSystemItem: .Add, target: self, action: #selector(CollectionCollectionViewController.addProduct(_:))) 

    navbar.setItems([item], animated: true) 

Alles funktioniert super, aber diese Tasten sind sehr nahe am rechten und linken Bildschirmrand. Wie kann ich diesen Schaltflächen Padding (oder Rand links und rechts) hinzufügen?

Es sieht wie folgt aus:

enter image description here

Ich sehe, dass dieser Abstand zwischen Tasten und Bildschirm nur eine Zeit ist, wenn ich diese ViewController starten, wenn ich es zur zweiten Mal starten, Abstand zwischen den Tasten und Bildschirm ist richtig. Kann mir jemand erklären warum?

Antwort

0

Es sieht so aus, als ob der Rahmen Ihrer Navigationsleiste für Ihren unerwarteten fehlenden Abstand verantwortlich ist. Seine x Position ist 0 und seine Breite ist die gleiche wie die Breite des View-Controllers. Daher gibt es keinen Abstand.

Ich würde vorschlagen, stattdessen eine Navigationsleiste im Storyboard des View-Controllers hinzuzufügen. In den meisten Fällen ist es vorzuziehen, so viele UI-Probleme wie möglich im Storyboard zu lösen, da dadurch weniger Code gelesen und verwaltet werden muss.

Wenn Sie jedoch die korrekte Rahmenposition und -abmessungen für eine Navigationsleiste ermitteln möchten, können Sie den Rahmen der Navigationsleiste drucken. Dann vergleicht man seinen Rahmen, wenn er ohne Abstand erscheint, mit seinem Rahmen, wenn er seine korrekte Position hat. Sie können dann seine x Position und width entsprechend anpassen.

+0

Es ist eine der Optionen, aber ich möchte programmatisch alles in meinem Projekt hinzuzufügen. Und in diesem Fall habe ich ein Problem und habe keine Ahnung, warum ... – PiterPan

+0

Ich tat es und das Ergebnis ist das gleiche in beiden Varianten '(0.0, 0.0, 320.0, 59.0)'. Ich füge hinzu, dass ich versuche, Naviewbar zu CollectionViewController hinzuzufügen – PiterPan

0

Ich habe eine Lösung für mein Problem. Wenn wir navbar programmatisch von Grund auf neu hinzufügen möchten, müssen wir diese Schritte in viewDidLoad() machen:

// setp 1 = create Navigation Bar 

    let navbar = UINavigationBar(frame: CGRect(x: 0, y: 0, width: self.view.frame.size.width, height: 59.0)) 
    navbar.delegate = self 

    //step 2 = create Navigation Item 

    let item = UINavigationItem() 
    item.title = "Quick choise" 


    //step 3 = create BarButtonItem and set position (left, right) 

    let leftButton = UIBarButtonItem(title: "Back", style: .Done, target: self, action: #selector(CollectionCollectionViewController.goBack(_:))) 
    item.leftBarButtonItem = leftButton 


    let rightButton = UIBarButtonItem(barButtonSystemItem: .Add, target: self, action: #selector(CollectionCollectionViewController.addProduct(_:))) 
    item.rightBarButtonItem = rightButton 

    //step 4 = add BarButtonItems to Navigation Bar 

    navbar.items = [item] 

    //step 5 = add Navigation Bar to view 

    self.view.addSubview(navbar)