web-dev-qa-db-ja.com

UINavigationBarを透明にする

INavigationBar透明をどのように作成しますか?私はそのバー項目を表示したままにしておきたいのですが。

223
quano

IOS 7以降でこれを実現する方法を知りたい人がいれば、解決策があります(iOS 6にも対応)

Objective-Cで

[self.navigationBar setBackgroundImage:[UIImage new]
                         forBarMetrics:UIBarMetricsDefault];
self.navigationBar.shadowImage = [UIImage new];
self.navigationBar.translucent = YES;

Swift 3(iOS 10)

self.navigationBar.setBackgroundImage(UIImage(), for: .default)
self.navigationBar.shadowImage = UIImage()
self.navigationBar.isTranslucent = true

Swift 2で

self.navigationBar.setBackgroundImage(UIImage(), forBarMetrics: .Default)
self.navigationBar.shadowImage = UIImage()
self.navigationBar.translucent = true

討論

ナビゲーションバーでtranslucentYESに設定すると、 UINavigationBar のドキュメントで説明されている動作のため、トリックが実行されます。ここで関連するフラグメントを報告します。

不透明なカスタム背景画像があるナビゲーションバーでこのプロパティをYESに設定すると、ナビゲーションバーは画像に1.0未満のシステム不透明度を適用します。

614

IOS5では、これを実行してナビゲーションバーを透明にすることができます。

nav.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)];

[nav.navigationBar setBackgroundImage:maskedImage forBarMetrics:UIBarMetricsDefault]; 
[img release];
29
Alex Stanciu

IOS7から:

self.navigationController.navigationBar.translucent = YES;
self.navigationController.navigationBar.shadowImage = [UIImage new];
self.navigationController.view.backgroundColor = [UIColor clearColor];
[self.navigationController.navigationBar setBackgroundImage:[UIImage new] forBarMetrics:UIBarMetricsDefault];
self.navigationController.navigationBar.backgroundColor = [UIColor clearColor];
23
Damien Romito

Swift 2.xでこれを行いたい場合:

self.navigationController?.navigationBar.setBackgroundImage(UIImage(), forBarMetrics: .Default)
self.navigationController?.navigationBar.shadowImage = UIImage()
self.navigationController?.navigationBar.translucent = true

またはSwift 3.x:

self.navigationController?.navigationBar.setBackgroundImage(UIImage(), for: .default)
self.navigationController?.navigationBar.shadowImage = UIImage()
self.navigationController?.navigationBar.isTranslucent = true
14
fuzz

これはうまくいくようです:

@implementation UINavigationBar (custom)
- (void)drawRect:(CGRect)rect {}
@end

navigationController.navigationBar.backgroundColor = [UIColor clearColor];
10
quano

上記の他の皆が言ったことをした後、すなわち:

navigationController?.navigationBar.setBackgroundImage(UIImage(), forBarMetrics: .default)
navigationController?.navigationBar.shadowImage = UIImage()
navigationController!.navigationBar.isTranslucent = true

... ナビゲーションバーはまだ白でした。そこで、次の行を追加しました。

navigationController?.navigationBar.backgroundColor = .clear

...出来上がり!これでうまくいくように見えました。

8
Clay Ellis

以下のコードは、このスレッドに選択された上部の回答を展開して、下部の境界線を取り除き、テキストの色を設定します。

  1. このコードの最後の2つのコード行は透明度を設定します。私はこのスレッドからそのコードを借りて、完全に機能しました!

  2. 「clipsToBounds」プロパティは、透明度を設定せずにORで下の境界線を取り除くコードでした(したがって、代わりに白/黒/などの背景を使用することにした場合でも、境界線なし)。

  3. 「tintColor」行(2番目のコード行)は、戻るボタンを明るい灰色に設定します

  4. バックアップとしてbarTintColorを保持しました。透明度が機能しない理由はわかりませんが、機能しない場合は、bgを白にしておきます。

    let navigationBarAppearace = UINavigationBar.appearance()
    navigationBarAppearace.tintColor = UIColor.lightGray
    navigationBarAppearace.barTintColor = UIColor.white
    navigationBarAppearace.clipsToBounds = true
    navigationBarAppearace.isTranslucent = true
    navigationBarAppearace.setBackgroundImage(UIImage(), for: .default)
    navigationBarAppearace.shadowImage = UIImage()
    
5
Dave G

私はこのトピックが古いことを知っていますが、人々がdrawRectメソッドをオーバーロードせずにそれがどのように行われたかを知りたい場合。

これが必要なものです:

self.navigationController.navigationBar.translucent = YES;
self.navigationController.navigationBar.opaque = YES;
self.navigationController.navigationBar.tintColor = [UIColor clearColor];
self.navigationController.navigationBar.backgroundColor = [UIColor clearColor];
5
Sander

C#/ Xamarinソリューション

NavigationController.NavigationBar.SetBackgroundImage(new UIImage(), UIBarMetrics.Default);
NavigationController.NavigationBar.ShadowImage = new UIImage();
NavigationController.NavigationBar.Translucent = true;
2
Mark Moeykens

次のコードを試してください。

self.navigationController.navigationBar.translucent = YES;
2
Russian

Swift 3.0の場合:

override func viewDidLoad() {
    super.viewDidLoad()

    navigationController?.navigationBar.setBackgroundImage(UIImage(), for: .default)
    navigationController?.navigationBar.shadowImage = UIImage()
    navigationController?.navigationBar.isTranslucent = true
}
2
Wilson

私のために働いた別の方法は、UINavigationBarをサブクラス化し、drawRectメソッドを空のままにすることです!!

@IBDesignable class MONavigationBar: UINavigationBar {


// Only override drawRect: if you perform custom drawing.
// An empty implementation adversely affects performance during animation.
override func drawRect(rect: CGRect) {
    // Drawing code
}}
1
M.Othman

これはSwift 2.0で機能します。

navigationController!.navigationBar.setBackgroundImage(UIImage(), forBarMetrics: UIBarMetrics.Default)
navigationController!.navigationBar.shadowImage = UIImage()
navigationController!.navigationBar.translucent = true
0
Chris3643

完全に透明という意味ですか、それとも写真アプリに見られる半透明の黒スタイルを使用するという意味ですか?後者は、barStyleプロパティをUIBarStyleBlackTranslucentに設定することで実現できます。前者...わからない。アイテムを表示したままにする場合は、バーのビュー階層を掘り下げて、背景を含むビューを削除する必要があります。

0

RRViewControllerExtension を確認します。これは、UINavigationバーの外観管理専用です。

プロジェクトでRRViewControllerExtensionを使用すると、オーバーライドするだけです

-(BOOL)prefersNavigationBarTransparent;

あなたのviewcontroller。

navigation bar tranparent

0
Roen

Swift 4.2で

self.navigationController?.navigationBar.setBackgroundImage(UIImage(), for: .default)
self.navigationController?.navigationBar.shadowImage = UIImage()
self.navigationController?.navigationBar.isTranslucent = true

(viewWillAppear)、viewWillDisappearで元に戻すには、

self.navigationController?.navigationBar.shadowImage = nil
self.navigationController?.navigationBar.isTranslucent = false
0
auspicious99