Avviso "Stile semplice non supportato in un elemento di navigazione" con il mio elemento pulsante a barre personalizzato


88

Trascino un pulsante rotondo rettangolo nella posizione dell'elemento pulsante barra di destra e imposto un'immagine al pulsante rotondo rettangolo. Tutto funziona bene, tranne l'avviso "Stile normale non supportato in un elemento di navigazione". Anche se seleziono lo stile dell'elemento del pulsante della barra su "Con bordi", l'avviso sarà ancora presente. Qual è il problema con Xcode 4.2? Grazie in anticipo!

Ps. Ho personalizzato molti elementi del pulsante a barra con il pulsante rotondo Rect, alcune volte Xcode 4.2 mostra solo un avviso su un elemento del pulsante a barra, alcune volte mostra gli avvisi su tutti gli elementi del pulsante a barra.


1
Ho scritto un post sul blog su questo: blog.mosheberman.com/…
Moshe

Non aggiungere pulsanti, aggiungi elementi del pulsante della barra. Questo è stato il mio errore.
Daniel Springer

Risposte:


135

Sono stato in grado di rimuovere questi errori modificando manualmente i file dello storyboard e ho trovato la voce incriminata style = "plain" sugli elementi del pulsante Bar <navigationItem>nell'elemento.

Modificato da:

<barButtonItem key="rightBarButtonItem" style="plain" id="juB-DL-F9i">

Per:

<barButtonItem key="rightBarButtonItem" id="juB-DL-F9i">

Questo ha cancellato gli avvertimenti ... giusto o sbagliato.

Questo potrebbe essere un trucco stupendo e la preoccupazione più grande è che non ho causato il root o rimosso gli elementi del pulsante della barra invisibile dal documento generale. Questo è stato dopo aver esaminato tutti gli elementi uno per uno e scoperto che alcune barre di navigazione erano vuote (senza figli) e probabilmente si è verificato con la grande quantità di ereditarietà di copia e incolla (cmd + c | v) e non utilizzando duplicati (cmd + d) per costruire l'interfaccia. Sebbene la causa di origine non fosse radice, il sintomo era che gli elementi della barra non venivano visualizzati nella "vista struttura" del documento da correggere. Il comportamento di Interface Builder mi sembra a volte sfumato e un contenitore vuoto in cui dovrebbe esserci qualcosa in una vista struttura è un odore. Be ', adesso è per me. A volte l'eliminazione del nodo incriminato e la ricostruzione risolvono i problemi più strani.

ATTENZIONE: fai il backup dei tuoi storyboard prima di provare questo ... il controllo della versione è tuo amico ... Non mi assumo alcuna responsabilità quando il tuo storyboard è completamente risucchiato e non verrà compilato. Tutto ciò che otterrai è un "te l'avevo detto!" Ho imparato nel modo più duro un paio di volte, ma un diligente controllo del codice sorgente mi ha salvato il mal di testa.

EDIT: inserire parentesi nei blocchi di codice


24
selezionare l'elemento barbutton in Interface Builder, aprire il pannello degli attributi sulla destra e cambiare lo stile dell'elemento del pulsante della barra in "Con bordi" ha applicato la stessa differenza al file dello storyboard. quindi questo dovrebbe essere sicuro.
mash

Grazie per quel consiglio @mash, il modo in cui l'ho fatto è stato orribilmente intriso di potenziale dolore e sofferenza.
Hunter-Orionnoir

@ SpaceDog2 Grazie per l'avviso. Non ho ancora aggiornato, quindi non posso aggiungere alcuna conferma a questo. Sarei comunque molto attento con questo metodo. So che finora ha aiutato molte persone. Col tempo vedremo se smetterà di aiutare.
Hunter-Orionnoir

5
Questa soluzione ha funzionato perfettamente per me in Xcode 7.1. Inoltre, invece di modificare direttamente il codice sorgente, puoi modificarlo nello storyboard stesso (cambiando lo stile da Plain a Bordered), e questo ha lo stesso identico risultato dell'eliminazione manuale style="plain"dal codice sorgente dello storyboard. Quindi, a me questo suggerimento di Hunter sembra legittimo.
Erik van der Neut

Controlla anche la risposta di dstudeba, non sapevo nemmeno cosa avesse descritto fosse possibile. potrebbe salvare tutti un po 'di dolore e sofferenza dalla modifica manuale del file. Il controllo del codice sorgente è tuo amico, sii al sicuro tutti. ;)
Hunter-Orionnoir

31

Se fai clic sull'avviso e non vai all'elemento di navigazione incriminato, procedi come segue. (rappresentazione visiva della risposta di Hunter con un metodo più sicuro dai commenti aggiunti)

Nel browser dei file fare clic con il pulsante destro del mouse sullo storyboard e selezionare Open As Source Code

inserisci qui la descrizione dell'immagine

Nella pagina del codice sorgente cerca "plain" e trova quello allegato a un elemento di navigazione.

inserisci qui la descrizione dell'immagine

Per ottenere il nome della vista, metti "scena" nella barra di ricerca e fai clic sulla freccia di ricerca indietro per cercare la prima istanza su quel tag sopra ilnavigationItem

inserisci qui la descrizione dell'immagine

Ecco il nome della tua scena, ora puoi cambiare la visualizzazione dello Storyboard Interface Builder - Storyboardcon il metodo del clic destro descritto sopra, quindi andare a selezionare la scena nel menu scena e l'elemento barra al suo interno.

inserisci qui la descrizione dell'immagine

Vai all'ispettore Attributi e cambia lo stile da PlainaBordered

inserisci qui la descrizione dell'immagine


1
Freddo. Lo proverò sicuramente la prossima volta che si verificherà.
Hunter-Orionnoir

13

Ho interrotto l'avvertimento sullo stile semplice dando un'occhiata alla struttura del documento. Quello stava mostrando il mio elemento di navigazione, e all'interno di quei 2 elementi del pulsante della barra e all'interno di ciascuno di essi un pulsante. L'impostazione incriminata era sull'elemento del pulsante a barra. Nell'ispettore degli attributi ho cambiato Stile da Semplice a Fatto e l'avvertimento è scomparso. Nota: sto usando XCode 5.


8

Se stai usando lo storyboard, fai clic sull'avviso e dovrebbe portarti all'elemento di navigazione incriminato (ne avevo due per il problema, uno mi ha portato lì l'altro no) - cambia lo stile e ripulisci il progetto.

Stile pulsante a barra impostato su normale


In questo problema sopra non mi ha portato da nessuna parte. Penso che questo sia il punto critico di questo particolare problema, l'elemento mancava del tutto dal navigatore, ma la risposta di dstudeba ha un approccio interessante, sii curioso se aprire lo storyboard in modo diverso aiuta le persone.
Hunter-Orionnoir

Questa è la risposta più appropriata. Ho cambiato lo stile in Bordato.
Andrej

6

backBarButtonItem leftBarButtonIteme rightBarButtonItemsono UINavigationItemoggetti. Non ci sono styleproprietà in UINavigationItemquindi questo è il motivo dell'avviso. È necessario impostare i barButtons in modo programmatico:

iOS 4:  

UIButton *bt=[UIButton buttonWithType:UIButtonTypeRoundedRect];
 [bt setFrame:YourFrame];
 //[bt setImage:[UIImage imageNamed:@"backBT"] forState:UIControlStateNormal];
 [bt addTarget:self action:@selector(popViewController:) forControlEvents:UIControlEventTouchUpInside];
 UIBarButtonItem *leftButton=[[UIBarButtonItem alloc] initWithCustomView:bt];
 self.navigationItem.leftBarButtonItem=leftButton;

Per iOS 5+:

Leggi la sezione "Personalizzazione dell'aspetto " del riferimento a UIBarButtonItem .


3
Ho un progetto ereditato con molti controller e pulsanti di visualizzazione. Non riesco a convincere XCode a dirmi quale pulsante sta causando l'avviso. Qualche suggerimento? Grazie!
Olie

Magari scorrere i controller di visualizzazione e "trovare" UIBarButtonItenStyle. Di solito è lì che la proprietà è impostata in modo errato
TimWhiting

1

Nella barra di navigazione prova a utilizzare UIBarButtonItem invece del pulsante Round rect e imposta un'immagine per esso.


ma lo stile di UIBarButtonItem non è ciò di cui ho bisogno.
lu yuan

1

Nel mio caso era l'immagine di una freccia indietro, che era impostata su "Plain".

Il messaggio di errore sembra fare riferimento a tutti gli elementi nella barra di navigazione.


0

Dopo che sei sicuro di avere tutti i pulsanti della barra nello storyboard impostati su qualcosa di diverso da quello normale, assicurati di eseguire un commit git ed eliminare i dati derivati. Ho passato un'eternità a cercare di capire perché il problema non si risolveva da solo e l'eliminazione della cartella dei dati derivati ​​lo ha risolto per me.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.