2014-10-20 14 views
11

Nel mio bar UINavigation aggiunto a un XIB con un numero di UIViews il posizionamento della voce pulsante della barra a destra ea sinistra è fuori strada:UIBarButton Punto sul bordo dello schermo in iOS 8, quando utilizzato in standalone vista

Navigation bar in additiona UIView in XIB

La vista in XIB ha semplicemente una presa per un controller di visualizzazione, ma non è la vista principale. E 'dimostrato tramite:

[UIView transitionFromView:self.view toView:self.settingsView duration:0.2 options:UIViewAnimationOptionTransitionFlipFromLeft completion:NULL]; 

ho un'altra visione più semplice che è direttamente legato alla proprietà vista di un controller della vista, che - come previsto - sembra proprio normale.

Normal navigation bar

Tutti i punti di vista hanno layout automatico. I vincoli vanno bene. Ho provato un certo numero di cose diverse, ma non sono riuscito a trovare una soluzione (o una ragione, se è per questo). La barra di navigazione e gli elementi sono semplici elementi del pulsante della barra di vaniglia senza nulla come i proxy di apparenza ecc ...

Nella simulazione 7.1, tutto sembra normale.

Qualcuno ha visto questo prima?

Grazie

[EDIT]

ho trovato una soluzione, ma non la ragione:

Se invece di

[UIView transitionFromView:self.view toView:self.settingsView duration:0.2 options:UIViewAnimationOptionTransitionFlipFromLeft completion:NULL]; 

che aggiunge la nuova vista come una visualizzazione secondaria della UIWindow,

utilizzare:

[UIView transitionWithView:self.view duration:0.2 options:UIViewAnimationOptionTransitionFlipFromLeft animations:^{ 
    [self.view addSubview:self.settingsView]; 
} completion:nil]; 

che aggiunge la nuova vista come vista secondaria della vista UIViewControllers esistente, tutto è a posto.

Mi chiedo se questo un bug e UINavigationBars rendono in un modo strano, se contenuta in una vista che viene dinamicamente aggiunta alla finestra ...

+0

Stesso problema. Ho una visualizzazione personalizzata e animata da visualizzare, ma gli elementi sinistro e destro toccano entrambi i bordi. – Geekoder

+0

Secondo i documenti, 'transitionFromView: toView: duration: options: completion:' per default sostituisce 'fromView' con' toView'. La tua soluzione aggiunge invece una sottoview. Questa potrebbe essere la differenza che causa il problema in particolare 'FromView' è la vista del controller – Aris

risposta

2

Non sono sicuro che cosa sta accadendo con UIBarButtonItem. Dovrebbe essere organizzato dal layout automatico e deve funzionare bene. Può essere uno dei conflitti di vincoli con altri o errati.

Se non si è in grado di risolverlo. Ho un'altra soluzione per te. È necessario creare UIBarButtonItem in modo programmatico nel tuo VC.

L'idea è di assegnare spazio dal riempimento sinistro e destro prima di aggiungere UIBarButtonItem.

Il codice sottostante vi guiderà a fare il trucco.

UIBarButtonItem *leftPadding = [[UIBarButtonItem alloc] initWithBarButtonSystemItem: 
           UIBarButtonSystemItemFixedSpace target:self action:nil]; 
[leftPadding setWidth:5]; // Adjust width for padding from left side. 

UIBarButtonItem *addButton = [[UIBarButtonItem alloc] initWithBarButtonSystemItem: 
           UIBarButtonSystemItemAdd target:self action:@selector(addButtonTapped:)]; 
[self.navigationItem setLeftBarButtonItems:@[leftPadding, addButton]]; 


UIBarButtonItem *rightPadding = [[UIBarButtonItem alloc] initWithBarButtonSystemItem: 
           UIBarButtonSystemItemFixedSpace target:self action:nil]; 
[rightPadding setWidth:10]; // Adjust width for padding from right side. 

UIBarButtonItem *doneButton = [[UIBarButtonItem alloc] initWithBarButtonSystemItem: 
           UIBarButtonSystemItemDone target:self action:@selector(doneButtonTapped:)]; 

[self.navigationItem setRightBarButtonItems:@[rightPadding, doneButton]]; 
+0

Questo funziona, naturalmente, ma in iOS 7 le cose sembrano sbagliate, perché il padding aggiuntivo compensa ulteriormente gli elementi del pulsante della barra. Sto ancora cercando un motivo per questo comportamento. Non voglio rilevare iOS 7 solo per aggiungere padding per iOS 8. Suppongo che Apple lo cambierà in un aggiornamento futuro ... – k1th

0

Aggiungere il pulsante utilizzando il codice di seguito, funzionerà sicuramente.

CGRect frameimg = CGRectMake(0, 0, 60, 30); 
UIButton *someButton = [[UIButton alloc] initWithFrame:frameimg]; 
//[someButton setBackgroundImage:image3 forState:UIControlStateNormal]; 
[someButton setTitle:@"Update" forState:UIControlStateNormal]; 
[someButton addTarget:self action:@selector(updateProfile) 
    forControlEvents:UIControlEventTouchUpInside]; 
[someButton setShowsTouchWhenHighlighted:YES]; 
UIBarButtonItem *menuButton =[[UIBarButtonItem alloc] initWithCustomView:someButton]; 
self.navigationItem.rightBarButtonItem = menuButton; 
0

Il problema è layoutMargins.

Sembra che il tuo UINavigationBar abbia margine zero. Dovrebbe avere 8 punti per ogni lato.

Problemi correlati