2012-01-04 32 views
14

我創建了自己的UINavigationBar子類,以啓用高於44px的自定義背景。使用自定義UINavigationBar導致UIBarButtonItem被定位錯誤

我做到了通過重寫這兩個方法:

-(void) drawRect:(CGRect)rect 
{ 
    [self.backgroundImage drawInRect:CGRectMake(0, 0, self.backgroundImage.size.width, self.backgroundImage.size.height)]; 
} 

- (CGSize)sizeThatFits:(CGSize)size 
{ 
    CGRect frame = [UIScreen mainScreen].applicationFrame; 
    CGSize newSize = CGSizeMake(frame.size.width , self.backgroundImage.size.height); 
    return newSize; 
} 

這是結果:

Custom bar with custom height

現在,我的問題,因爲你可以看到的是,所有的UIBarButtonItem的(和titleView)放置在導航欄的底部。

我希望他們被固定到酒吧的頂部(當然有一些填充)。 我需要重寫什麼才能實現這個目標?

謝謝!

編輯:

這是我使用的解決方案:

-(void) layoutSubviews 
{ 
    [super layoutSubviews]; 
    for (UIView *view in self.subviews) 
    { 
     CGRect frame = view.frame; 
     frame.origin.y = 5; 
     view.frame = frame; 
    } 
} 

是否爲空閒狀態的伎倆,仍然有push和pop的項目的一些怪異的行爲。

+0

你是怎麼解決這個問題?請你張貼請! – luca 2012-04-17 20:05:06

+0

@luca - 發佈的解決方案 – 2012-04-18 08:59:40

+0

您是否曾經能夠解決push/pop問題? – lti 2012-06-26 20:42:46

回答

6

嘗試覆蓋layoutSubviews:呼叫[super layoutSubviews]裏面,然後重新放置項目。

+0

我已經試過了,說實話,它幾乎是在工作: 在空閒狀態下,按鈕已到位,但在動畫導航項的推動和彈出時,所有動畫對象的起始位置仍然位於酒吧。 我甚至試圖覆蓋addSubview:但它沒有奏效。 – 2012-01-04 14:58:01

5

爲了解決sizeThatFits推/彈出問題使用setTitleVerticalPositionAdjustment:(CGSize)大小

- (CGSize)sizeThatFits:(CGSize)size { 
    UIImage *img = [UIImage imageNamed:@"navigation_background.png"]; 
    [self setTitleVerticalPositionAdjustment:-7 forBarMetrics:UIBarMetricsDefault]; 
    CGRect frame = [UIScreen mainScreen].applicationFrame; 
    CGSize newSize = CGSizeMake(frame.size.width , img.size.height); 
    return newSize; 
} 
+0

非常好,感謝「setTitleVerticalPositionAdjustment」-tip! – Mattias 2012-11-26 13:02:41

相關問題