5

Desidero un UIView personalizzato nella mia UINavigationBar tra un BarButtonItem sinistro e uno destro ma il più ampio possibile. Per questo motivo ho aggiunto un UIView in IB alla NavigationBar. Con l'autolayout disattivato tutto funziona come previsto con le maschere autoresizing. Ma nel mio storyboard con l'autolayout abilitato non riesco a farlo funzionare. Non sembra che possa impostare alcun vincolo in IB per titleView. Se ruoto il mio dispositivo in modalità orizzontale, l'UIView ha ancora la stessa larghezza. Cosa devo fare in modo che titleView riempia lo spazio tra i miei UIBarButtonItems con l'autolayout abilitato?Autoresize titleView in un NavigationBar con autolayout

Grazie per tutto l'aiuto

Linard

risposta

4

ho risolto il problema come segue nel mio codice:

- (void)willAnimateRotationToInterfaceOrientation:(__unused UIInterfaceOrientation)toInterfaceOrientation duration:(NSTimeInterval)duration 
{ 
[super willAnimateRotationToInterfaceOrientation:toInterfaceOrientation duration:duration]; 

    CGSize navigationBarSize = self.navigationController.navigationBar.frame.size; 
    UIView *titleView = self.navigationItem.titleView; 
    CGRect titleViewFrame = titleView.frame; 
    titleViewFrame.size = navigationBarSize; 
    self.navigationItem.titleView.frame = titleViewFrame; 
} 

non ho trovato un'altra soluzione (con ridimensionamento automatico), ma io Sono aperte a soluzioni nuove e/o migliori

Linard

-4

È possibile aggiungere vincoli nel codice.

In viewDidLoad, si può fare qualcosa di simile:

UIView *titleView = [[UIView alloc] initWithFrame:CGRectZero]; 
self.navigationItem.titleView = titleView; 
UIView *titleViewSuperview = titleView.superview; 
titleView.translatesAutoresizingMaskIntoConstraints = NO; 
[titleViewSuperview addConstraint:[NSLayoutConstraint constraintWithItem:titleView attribute:NSLayoutAttributeLeading relatedBy:NSLayoutRelationEqual toItem:titleViewSuperview attribute:NSLayoutAttributeLeading multiplier:1 constant:0]]; // leading 
[titleViewSuperview addConstraint:[NSLayoutConstraint constraintWithItem:titleView attribute:NSLayoutAttributeTop relatedBy:NSLayoutRelationEqual toItem:titleViewSuperview attribute:NSLayoutAttributeTop multiplier:1 constant:0]]; // top 
[titleViewSuperview addConstraint:[NSLayoutConstraint constraintWithItem:titleViewSuperview attribute:NSLayoutAttributeWidth relatedBy:NSLayoutRelationEqual toItem:titleView attribute:NSLayoutAttributeWidth multiplier:1 constant:0]]; // width 
[titleViewSuperview addConstraint:[NSLayoutConstraint constraintWithItem:titleViewSuperview attribute:NSLayoutAttributeHeight relatedBy:NSLayoutRelationEqual toItem:titleView attribute:NSLayoutAttributeHeight multiplier:1 constant:0]]; // height 
+0

Grazie per il suggerimento. Lo proverò non appena avrò tempo ... –

+0

Ho un arresto anomalo sul limite della larghezza perché titleSuperView è nullo. Qualcun altro ha avuto fortuna? – djibouti33

+6

Almeno in iOS 7, non è possibile modificare i vincoli per UINavigationBar gestito da un controller – Andy

Problemi correlati