Мне нужно настроить вертикальное положение моего 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?
Я нахожу другое решение в http://stackoverflow.com/questions/6566216/vertically-aligning-uinavigationitems/17434530#17434530, хотя это немного сложнее, чем мое. –