2

UINavigationBar と UIToolbar のカスタム イメージを使用するアプリに取り組んでいますが、これは問題ありませんが、ナビゲーション バーの下とツールバーの上にドロップ シャドウが必要であり、常に他のすべてのビュー コントローラーの上に配置されます。テーブルビューではうまく機能しないため、影を含む背景画像を単純に作成することはできません。また、ナビゲーション バーとツールバーを非表示 (アニメーション化) に設定したときに、影をアニメーション化する必要があります。

ネット上の Stack Overflow やその他のソースに目を通し、提案されたソリューションに取り組みましたが、UINavigationBar、UIToolbar、さらには UINavigationController をサブクラス化して、求めている結果を提供することはできません。

提供できる助けをいただければ幸いです。ありがとう :)

4

3 に答える 3

2

結局、影付きの背景png画像を使用し、それらをUINavigationBarとUIToolbarのサブクラスに適用して、drawRectメソッド(背景画像用)とsizeThatFitsメソッドを実装してナビゲーションバーのサイズを変更することにしました。これが最終製品です(ボタンはバーを非表示にします):

各サブクラスに実装したメソッドは次のとおりです。

 - (void)drawRect:(CGRect)rect {
   UIImage *image = [[UIImage imageNamed:@"bargloss-withshadow.png"] retain];
   [image drawInRect:rect];
   [image release];
}


- (CGSize)sizeThatFits:(CGSize)size {
    CGSize newSize = CGSizeMake(320,60);
    return newSize;
}

また、IBでバーを黒半透明にして、コンテンツがその下を流れるようにしたことに注意してください。

于 2011-04-09T00:30:53.963 に答える
1

ビュー階層であまり派手なことをしていなければ、比較的簡単に実行できます。application:didFinishLaunchingWithOptions メソッドに次のコード行を追加します。

dispatch_async(dispatch_get_main_queue(), ^{
    UIWindow* mainWindow = [[[UIApplication sharedApplication] windows] objectAtIndex:0];
    UIView* mainView = [[mainWindow subviews] objectAtIndex:0];
    UIImageView* shadowImageView = [[UIImageView alloc] initWithImage:kImgNavbarShadowResizeable];
    shadowImageView.frame = CGRectMake(0, 64, 320, shadowImageView.frame.size.width);
    [mainView insertSubview:shadowImageView atIndex:1];
});

shadowImageView は、シャドウとして使用する imageView です。

于 2012-07-25T11:43:57.587 に答える
0

Matt Gallagher のブログ投稿をご覧ください。やりたいこと(の一部)をカバーします。それ以外に、必要に応じてアニメーション化できる「シャドウ ビュー」をナビゲーション コントローラーの上に追加してみてください。

于 2011-04-08T14:47:48.477 に答える