2013-11-15 54 views
1

我需要調整UINavigationBar中UIBarButtonItem的垂直位置。我認爲有辦法做到這一點。將UIView添加到UIBarButtonItem並將UIButton添加到UIView。沒關係,如果你只有一個或兩個導航欄。但是我覺得如果你有幾十個UINavigationBar,特別是在一個故事板裏面,這太麻煩了。所以我做了一些研究,並找到了一個簡單的解決方案。這是使用類別。下面是我的源代碼:調整UINavigationBar中的BarButtonItem位置

#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); 
    } 
} 

它完美iOS中7和iOS中6的第一個視圖控制器,但它不會爲推的UIViewController中的iOS 6工作,我找不到任何理由爲了那個原因。任何人都可以建議嗎?我的iOS 6代碼有什麼問題?

+0

我在 找到另一個解決方案http://stackoverflow.com/questions/6566216/vertically-aligning-uinavigationitems/17434530#17434530雖然它比我的更難一些。 –

回答

2

您應該可以使用iOS5中引入的UIAppearance代理方法來實現此目的。特別是:

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

檢查UIBarButtonItemdocs以獲得更多信息。

+1

然而,這在iOS 7中似乎不太適用。當在那裏設置標題位置時,我遇到了一些問題,然後操作系統接管並且任何其他調整都會導致按鈕移動。任何方向都會移動它。最終目的地是默認位置。具體來說,我有一個編輯按鈕,並試圖將其固定到較高的導航欄的頂部的這個問題。 – cynistersix