2015-04-10 10 views
6

posso aggiungere un titleView al mio navigationItem molto facilmente nel codice:Aggiunta navigationItem.titleView in storyboard sta venendo a mancare

UIImageView *navImageView = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"nav_logo"]]; 
UIView *titleView = [[UIView alloc] initWithFrame:navImageView.frame]; 
[titleView addSubview:navImageView]; 
self.navigationItem.titleView = titleView; 

Comunque, sto cercando di fare questo nel mio storyboard, e sto fallendo miseramente.

Ecco che cosa ho fatto:

  1. trascinare e rilasciare un UIView in cima alla mia VC Articolo di navigazione.
  2. Trascinare e rilasciare un UIImageView in cima UIView
  3. Add larghezza/altezza/leader/Top vincoli
  4. impostare la proprietà immagine del UIImageView

Ho anche impostare lo sfondo del mio UIView a rosso (beh ok, più come un arancio bruciato) per illustrare il problema.

Ecco come le cose rendono out:

enter image description here

Sono sorpreso questo è stato così difficile. Qualche idea?

risposta

5

È impossibile avere i vincoli di caricamento automatico per gli elementi di navigazione in uno storyboard. Credo che in realtà stai trascinando le visualizzazioni sul controller di visualizzazione reale. Puoi trascinare solo barButtonItems nel navigationItem.

Una soluzione alternativa è quella di

  1. Creare la vista in un xib separata senza utilizzare autolayout
  2. Caricare la XI ter nel codice
  3. setTranslatesAutoresizingMaskIntoConstraints a vero
  4. Assegnare il titleView a the view

Dalla mia esperienza, l'utilizzo dell'autolayout con qualsiasi vista nella barra di navigazione non funziona bene e porta a risultati imprevisti. Ad esempio, mi sono imbattuto in errori in cui la presentazione di UIActivityViewController ha causato l'aggiunta di vincoli imprevisti alla titleView di navigationItem.

Prima: enter image description here

Dopo aver presentato UIActivityViewController e saltando il passaggio 3: enter image description here

15

Nel generatore di interfaccia storyboard

  • Selezionare la vista del regolatore
  • Nella finestra di ispezione attributi (⌘⌥ 4), in "Metriche simulate", per il selettore "Barra superiore", scegline uno delle barre di spostamento
  • allora si dovrebbe essere in grado di trascinare un UIView sopra il titolo sulla Storyboard
  • È possibile modificare il "Top Bar" impostazione torna a "derivato", se vuoi

Ecco un'immagine dello storyboard dopo trascinando un UIView sopra il titolo:

after dragging UIView over the title

0

Questo problema strano ha un rapporto con le classi dimensionali.

In realtà, ho avuto lo stesso problema e la soluzione è stata:

  1. Impostare la classe formato per il vostro storyboard per Any,Any
  2. Trascinare la vista nella voce barra di navigazione.
  3. Ripristina la classe di dimensioni dello storyboard.

E tutto funziona come un fascino!

Penso che l'aggiunta della vista all'elemento di navigazione con una classe di dimensione non impostata su Any,Any sta causando il problema.

Spero che questo funzioni per tutti, perché è stato davvero terribile: [.

1

Per coloro che si sono trovati a combattere con problemi di aggiunta di visualizzazione personalizzata o UIButton all'interno di UIBarButtonItem in Xcode 8 ecco la soluzione: Xcode accetta il trascinamento solo nella proprietà di visualizzazione del controllore ora (Xcode 7 ha permesso di trascinare direttamente su UINavigationItem). Se elimini il controller view, ti permetterà di trascinare gli oggetti sulla barra di navigazione. Crea quindi un nuovo controller di navigazione vuoto, rimuovi la vista principale all'interno del controller di visualizzazione radice, trascina gli oggetti sulla barra di navigazione, copia questo elemento di navigazione (non la barra stessa) e incollalo sul controller di destinazione, sostituirà i vecchi elementi di navigazione. Dopo aver rimosso quel controller vuoto. PROFITTO!

Sembra che il team di Apple Xcode produca nuove missioni per gli sviluppatori con una passione ancora maggiore del loro prodotto principale.

Problemi correlati