2012-05-23 14 views
10

Ho un titoloView personalizzato che ho bisogno di impostare la larghezza massima per. Questa sarebbe la larghezza dello schermo - larghezza dell'elemento sinistro (titolo posteriore, pulsante o nullo) - larghezza dell'elemento a destra (pulsante o nullo). Come posso determinarlo?Ottieni la larghezza massima di uinavigationItem.titleView?

Grazie.

risposta

4

La barra di navigazione non imposta automaticamente la larghezza al massimo? Voglio dire, sono sicuro che la dimensioneThatFits: metodo del tuo titleView personalizzato è chiamato. Forse questo è un buon punto di partenza.

+0

Non imposta automaticamente la larghezza. Posso chiamare sizeToFit che chiama sizeThatFits dopo averlo impostato, ma non so cosa restituire da sizeThatFits. Da dove ottengo la larghezza massima? – Stephanie

+0

Non l'ho provato da solo, ma poiché le viste titolo sono, in realtà, ridimensionate per adattarsi e per essere centrate tra gli elementi di navigazione sinistro e destro, mi aspetto che il messaggio sizeThatFits sia effettivamente inviato dalla barra di navigazione stessa al titleView. Non è il caso? –

+0

Non credo, ma non ne sono sicuro. Ma in entrambi i casi, cosa ritorno da sizeThatFits? – Stephanie

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

[self.navigationItem setTitleView:_segmentedControl]; 

Impostazione CGFLOAT_MAX la larghezza per la vista titolo navigationItem utilizzare lo spazio massimo disponibile tra la voce di sinistra e la voce giusta.

+0

Questa dovrebbe essere contrassegnata come la risposta corretta. – Peymankh

+0

Questo ha funzionato per me su iOS <11 (la vista è stata automaticamente ridimensionata per me in iOS 11) –

0

Impostare la larghezza del titolo su una larghezza maggiore di quella necessaria per la larghezza massima dello schermo e la barra di navigazione ridimensiona la larghezza per adattarla allo schermo. Se sono presenti UIBarButtonItem sinistro o destro, quindi titleView esegue il ridimensionamento relativo. Prova a ruotare lo schermo e vedere di persona.

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 
} 
Problemi correlati