2013-11-15 4 views
1

Мне нужно настроить вертикальное положение моего UIBarButtonItem в UINavigationBar.I думаю, что есть способ сделать это. Чтобы добавить UIView в UIBarButtonItem и добавить UIButton в UIView. Это нормально, если у вас есть только одна или две панели навигации. Но я думаю, что это слишком сложно, если у вас есть десятки UINavigationBar, особенно внутри раскадровки. Поэтому я сделал несколько исследований и нашел для этого легкое решение. То есть использовать категорию. Вот мой исходный код:Отрегулируйте положение BarButtonItem в UINavigationBar

#pragma clang diagnostic push 
#pragma clang diagnostic ignored "-Wobjc-protocol-method-implementation" 

-(void)viewWillAppear:(BOOL)animated 
{ 
    [self show:NO]; 
} 

// do your override 
-(void)viewWillLayoutSubviews 
{ 
    [self changeTheButtonPosition:self.navigationItem.leftBarButtonItem]; 
    [self changeTheButtonPosition:self.navigationItem.rightBarButtonItem]; 
} 

-(void)viewDidAppear:(BOOL)animated 
{ 
    [self show:YES]; 
} 

#pragma clang diagnostic pop 

-(void)show:(BOOL)show 
{ 
    self.navigationItem.leftBarButtonItem.customView.hidden = !show; 
    self.navigationItem.rightBarButtonItem.customView.hidden = !show; 
} 

- (void)changeTheButtonPosition:(UIBarButtonItem *)barButtonItem 
{ 
    if (barButtonItem) 
    { 
     UIView* customView = barButtonItem.customView; 
     //  NSLog(@"custom view frame = %@",NSStringFromCGRect(customView.frame)); 
     CGRect frame = customView.frame; 
     CGFloat y = SYSTEM_VERSION_LESS_THAN(@"7") ? 10.0f : 5.0f; 
     customView.frame = CGRectMake(frame.origin.x, y, frame.size.width, frame.size.height); 
    } 
} 

Он отлично работает в прошивке 7 и в первом контроллере представления в прошивке 6. Но это не работает для толкаемого UIViewController в прошивке 6. Я не могу найти какую-либо причины для этого. Может кто-нибудь посоветовать? Что не так в моем коде в iOS 6?

+0

Я нахожу другое решение в http://stackoverflow.com/questions/6566216/vertically-aligning-uinavigationitems/17434530#17434530, хотя это немного сложнее, чем мое. –

ответ

2

Вы должны быть в состоянии достичь этого, используя методы прокси UIAppearance, представленные в iOS5. В частности:

- (void)setBackgroundVerticalPositionAdjustment:(CGFloat)adjustment forBarMetrics:(UIBarMetrics)barMetrics 
- (void)setTitlePositionAdjustment:(UIOffset)adjustment forBarMetrics:(UIBarMetrics)barMetrics 

Проверить UIBarButtonItemdocs для получения дополнительной информации.

+1

Это, однако, не очень хорошо работает в iOS 7. У меня есть некоторые проблемы при настройке позиции заголовка, а затем ОС берет на себя и любые другие настройки на что-либо, заставляя кнопку двигаться. Любая ориентация перемещает его. Конечным пунктом назначения является местоположение по умолчанию. В частности, у меня есть эта проблема с кнопкой редактирования и попытка привязать ее к верхней панели более высокой навигационной панели. – cynistersix

Смежные вопросы