2012-01-04 11 views
14

44pxsよりも大きいカスタム背景を有効にするために、独自のUINavigationBarサブクラスを作成しました。カスタム高さのカスタム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; 
} 

そして、これが結果です:

私はこれらの2つの方法オーバーライドすることでそれをやった今、あなたが見ることができるように私の問題は、そのすべてのUIBarButtonItemの(ある

Custom bar with custom height

をし、 titleView)がナビゲーションバーの下部に配置されます。

私はそれらをバーの上部に固定したいと思います(もちろんいくつかのパッドがあります)。 これを達成するためには何を無効にする必要がありますか?

ありがとうございます!

EDIT:

これは私が使用したソリューションです。

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

アイドル状態のためのトリックが、まだプッシュとポップの項目にいくつかの奇妙な行動を持っています。

+0

どのようにこの問題を解決しましたか?あなたは投稿してください! – luca

+0

@luca - 投稿された解決策 –

+0

プッシュ/ポップの問題を解決できましたか? – lti

答えて

6

layoutSubviewsを無効にしてください:[super layoutSubviews]を呼び出してから、アイテムの位置を変更してください。

+0

私は正直言ってこれを試しましたが、それはほとんど働いています: アイドル状態では、ボタンは定位置にありますが、ナビゲーションアイテムのプッシュとポップをアニメートしている間は、アニメーションオブジェクトの開始位置はバー。 私はaddSubview:をオーバーライドしようとしましたが、動作しませんでした。 –

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"というヒントをありがとう! – Mattias

関連する問題