2012-05-23 14 views

Antwort

4

Stellt die Navigationsleiste nicht automatisch die maximale Breite ein? Ich meine, ich bin sicher, dass die sizeThatFits: -Methode Ihrer benutzerdefinierten titleView aufgerufen wird. Vielleicht ist das ein guter Ausgangspunkt.

+0

Die Breite wird nicht automatisch festgelegt. Ich kann sizeToFit aufrufen, das sizeThatFits aufruft, nachdem ich es eingestellt habe, aber ich weiß nicht, was ich von sizeThatFits zurückgeben soll. Woher bekomme ich die maximale Breite? – Stephanie

+0

Ich habe es nicht selbst getestet, aber da Titelansichten tatsächlich so skaliert werden, dass sie zwischen den linken und rechten Navigationselementen passen und zentriert werden, erwarte ich, dass die sizeThatFits - Nachricht tatsächlich von der Navigationsleiste selbst an die Titelansicht Ist es nicht so? –

+0

Ich glaube nicht, aber ich bin mir nicht sicher. Wie auch immer, was komme ich von sizeThatFits zurück? – Stephanie

6
_segmentedControl.frame = CGRectMake(0, 0, CGFLOAT_MAX, _segmentedControl.frame.size.height); 

[self.navigationItem setTitleView:_segmentedControl]; 

Einstellung CGFLOAT_MAX als Breite für die navigationItem Titelansicht den maximalen Abstand zwischen dem linken Punkt verfügbar verwenden und dem richtigen Artikel.

+0

Dies sollte als die richtige Antwort markiert werden. – Peymankh

+0

Dies funktionierte für mich auf iOS <11 (die Ansicht wurde automatisch für mich in iOS 11 Größe) –

0

Setzen Sie die titleView-Breite auf eine größere Breite als für die maximale Bildschirmbreite erforderlich, und die Navigationsleiste passt die Breite an den Bildschirm an. Wenn links oder rechts UIBarButtonItem vorhanden ist, ändert sich die Größe von titleView relativ zu ihnen. Versuchen Sie, den Bildschirm zu drehen und sehen Sie selbst.

func setTitleView(){ 
    guard let navFrame = navigationController?.navigationBar.frame else{ 
     return 
    } 
    let myView = UIView(frame: CGRect(x: 0, y: 0, width: navFrame.width*3, height: navFrame.height)) 
    myView.backgroundColor = UIColor.orange 
    self.navigationItem.titleView = myView 
}