1

完全に透明なナビゲーション バーを備えたアプリをいくつか見てきましたが、ボタンが表示されているため、ボタンを非表示にしないものも見つかりません。フェードなどと同じアニメーションがあったため、ナビゲーションバーに UINavigationController を使用していたと確信しています。

現在、ViewDidLoad と ViewDidAppear でこのコードを使用して、最初のページにあるはずがないため、ナビゲーション バーを非表示または表示しています。

[self.navigationController setNavigationBarHidden:NO animated:YES];

そしてその透明性のためのこのコード:

[self.navigationController.navigationBar setAlpha:0.0];
4

3 に答える 3

7

UINavigationBar以外のメソッドを含まないのサブクラスを作成しますdrawRect:。必要に応じてカスタム描画コードを配置し、そうでない場合は空のままにします (ただし、実装します)。

次に、UINavigationControllerのナビゲーション バーをこのサブクラスに設定します。コードで使用するinitWithNavigationBarClass:toolBarClass:か、ストーリーボード/ニブを使用している場合は Interface Builder で変更します (横の階層にある UINavigationController のサブクラスです)。

最後に、ナビゲーション バーへの参照を取得して、含まれているビュー コントローラーを使用self.navigationController.navigationBarして構成できるようにします。loadViewナビゲーション バーtranslucentYESおよびbackgroundColorに設定し[UIColor clearColor]ます。以下の例。

//CustomNavigationBar.h
#import <UIKit/UIKit.h>

@interface CustomNavigationBar : UINavigationBar
@end

//CustomNavigationBar.m
#import "CustomNavigationBar.h"

@implementation CustomNavigationBar

- (void)drawRect:(CGRect)rect {}

@end

//Put this in the implementation of the view controller displayed by the navigation controller
- (void)viewDidLoad
{
    [super viewDidLoad];
    self.navigationController.navigationBar.translucent = YES;
    [self navigationController].navigationBar.backgroundColor = [UIColor clearColor];
}

Plague を模倣した結果のスクリーン ショットを次に示します。

ここに画像の説明を入力

drawRect:ボタンとラベルだけでなく、UINavigationBar があることを示すために、青い境界線が描かれています。sizeThatFits:バーを高くするためにサブクラスに実装しました。ボタンとラベルは両方とも、UIBarButtonItems としてバーに配置された正しい UI 要素を含む UIView です。最初にそれらをビューに埋め込んで、垂直方向の配置を変更できるようにしました(そうしないと、実装したときに下に「スタック」しましたsizeThatFits:)。

于 2012-11-17T17:22:31.947 に答える
1
self.navigationController.navigationBar.translucent = YES; // Setting this slides the view up, underneath the nav bar (otherwise it'll appear black)
const float colorMask[6] = {222, 255, 222, 255, 222, 255};
UIImage *img = [[UIImage alloc] init];
UIImage *maskedImage = [UIImage imageWithCGImage: CGImageCreateWithMaskingColors(img.CGImage, colorMask)];

[self.navigationController.navigationBar setBackgroundImage:maskedImage forBarMetrics:UIBarMetricsDefault];
//remove shadow
    [[UINavigationBar appearance] setShadowImage: [[UIImage alloc] init]];
于 2013-09-12T04:33:18.500 に答える