2015-12-15 12 views
5

Sto tentando di impostare l'etichetta del titolo nella barra di navigazione per consentire più righe. Ho un codice personalizzato del controller di navigazione su cui sto inserendo il codice multilinea. So che il codice già lì funziona, ma la mia parte multilinea non funziona.Barra di navigazione multilinea Titolo

let titleLabel = UILabel() 
titleLabel.frame = CGRectMake(0, 0, self.navigationBar.frame.width, self.navigationBar.frame.height * 2) 
titleLabel.numberOfLines = 0 
titleLabel.lineBreakMode = .ByWordWrapping 

navigationItem.titleView = titleLabel 

Ma il testo scappa ancora alla fine. Ho anche provato a inserirlo nel controller di visualizzazione individuale, aggiungendo self.navigationController?. di fronte a navigationItem con gli stessi risultati.

C'è qualcosa che mi manca nel mio codice che manterrebbe l'etichetta del titolo dall'utilizzo di più righe?

+0

vostro 'navigationBar.frame.width' è stato forse non ancora di dimensioni per adattarsi allo schermo. Potresti voler sovrascrivere 'viewDidLayoutSubviews' per rilevare il frame corretto. –

risposta

20

Ecco un esempio di codice di come è possibile creare una multilinea navigationBar titolo

let label: UILabel = UILabel(frame: CGRectMake(0, 0, 400, 50)) 
label.backgroundColor = UIColor.clearColor() 
label.numberOfLines = 2 
label.font = UIFont.boldSystemFontOfSize(16.0) 
label.textAlignment = .Center 
label.textColor = UIColor.whiteColor() 
label.text = "This is a\nmultiline string for the navBar" 
self.navigationItem.titleView = label 

Swift 3.0:

let label = UILabel(frame: CGRect(x:0, y:0, width:400, height:50)) 
label.backgroundColor = .clear 
label.numberOfLines = 2 
label.font = UIFont.boldSystemFont(ofSize: 16.0) 
label.textAlignment = .center 
label.textColor = .white 
label.text = "This is a\nmultiline string for the navBar" 
self.navigationItem.titleView = label 
+0

Avremo bisogno di qualche ritocco per farlo comportare più come vorrei, ma questo ha aiutato. –

+0

Ho usato 'navigationItem.titleView' senza impostare il frame in modo esplicito e sta funzionando bene. – gutte

0

Usare questo per ottenere la posizione dell'etichetta esattamente come si desidera:

let labelWidth = navBar.bounds.width - 110 

    let label = UILabel(frame: CGRect(x:(navBar.bounds.width/2) - (labelWidth/2), y:0, width:labelWidth, height:navBar.bounds.height)) 
    label.backgroundColor = UIColor.clear 
    label.numberOfLines = 0 
    label.font = UIFont.boldSystemFont(ofSize: 13.0) 
    label.textAlignment = .center 
    label.textColor = UIColor.black 
    label.lineBreakMode = .byWordWrapping 

    label.text = loadedName 
    navBar.topItem?.title = nil 
    navBar.addSubview(label) 

il valore 110 nella riga superiore e è la spaziatura che vuoi su entrambi i lati dell'etichetta.

0

Questo è fattibile in uno storyboard. Basta trascinare un UIView nella barra di navigazione, quindi trascinare un UILabel su di esso nel contorno del documento, impostare le linee su 2 e l'allineamento al centro.

enter image description here