2013-07-18 16 views
7

Mi piace creare le mie viste come file Xib standalone, quindi istanziarle e aggiungerle come subviews.Layout automatico con UINavigationBar e UIBarButtonItem

Così, quando si lavora con un UINavigationBar, mi aspettavo di essere in grado di fare la stessa cosa, in primo luogo la creazione di mia visualizzazione personalizzata - dalla Xib - poi aggiungendo come una visualizzazione personalizzata alla UIBarButtonItem:

UIBarButtonItem *anItem = [[UIBarButtonItem alloc] initWithCustomView:_myCustomView]; 

Quindi aggiungendo alla barra di navigazione:

self.navigationBar.topItem.rightBarButtonItems = @[ anItem, anotherItem ]; 

Fin qui tutto bene.

Ora, _myCustomView utilizza Layout automatico (AL) e ho pensato che questo non sarebbe stato un problema. Non è il caso. Ho provato praticamente tutto. Niente ha funzionato. Ho persino provato ad aggiungere la vista personalizzata come sottoview del controller che ha la barra di navigazione. Pensando che come fratelli nella gerarchia della vista, AL lo considererebbe come una normale vista al di fuori dello UINavigationBar.

Anche questo non ha funzionato. Il controller updateViewConstraints è stato chiamato ma mai applicato. La cornice iniziale della vista è rimasta a CGRectZero. È come se AL vedesse che la vista si trova in cima a uno UINavigationBar, anche come fratello, e decide che non ha bisogno di stendere.

Naturalmente, ho provato bringSubviewToFront, translatesAutoresizingMaskIntoConstraintstranslatesAutoresizingMaskIntoConstraints e così via. Quest'ultimo ha dato la bella:

terminazione app a causa di eccezione non identificata 'NSInternalInconsistencyException', la ragione: 'Auto Layout ancora richiesto dopo l'esecuzione -layoutSubviews. L'implementazione di -layoutSubviews di MyNavigationBar's deve chiamare super. '

Quindi, la domanda è, qualcuno ha caricato una visualizzazione personalizzata con AL da un Xib, e impostare con successo questo come un customView su un UIBarButtonItem? Se é cosi, come?

+0

Non ho ancora archiviato un radar per questo, ma mi sono imbattuto in questo e sembra un bug di iOS 6. Creare UIBarButtonItem e la sua vista mostra lo stesso problema a livello di programmazione. – Ryan

+0

Hai trovato una soluzione per questo problema? – Redwarp

+0

Qualche notizia su questo argomento? Penso di avere ancora un problema simile (anche se con una barra degli strumenti) in iOS 7. –

risposta

1

Sembra un duplicato di iOS Autolayout and UIToolbar/UIBarButtonItems

UIBarButtonItems non ereditare da UIView, in modo da utilizzare visualizzazioni personalizzate basate configurazione automatica all'interno di essi potrebbero non essere pienamente supportati. Sembra che tu debba fare la cosa di layout pre-auto finché il problema non viene risolto. Suggerirei di sporgere un bug.

MODIFICA: Con la funzione di pre-layout automatico, intendo dire manipolare direttamente la cornice delle viste.

Problemi correlati