web-dev-qa-db-ja.com

ナビゲーションバーの下部の境界線iOS 7を削除する

IOS7がナビゲーションバーの下に自動的に表示する下の境界線を削除する方法はありますか?

37
Gnamm

正しく理解できたら

[[UINavigationBar appearance] setShadowImage:[[UIImage alloc] init]];
46
muffe

ナビゲーションが半透明かどうかにかかわらず、iOS7では機能しません...

Apple documentation;

説明ナビゲーションバーに使用されるシャドウイメージ。デフォルト値はnilで、デフォルトのシャドウ画像に対応しています。非nilの場合、このプロパティはデフォルトの代わりに表示するカスタムシャドウイメージを表します。カスタムシャドウ画像を表示するには、setBackgroundImage:forBarMetrics:メソッドを使用してカスタム背景画像も設定する必要があります。デフォルトの背景画像が使用される場合、このプロパティの値に関係なくデフォルトの影画像が使用されます。

したがって、基本的にそのsetBackgroundImageを実装する必要があります。 追記、iOS7では外観はもう使用しませんが、現在のviewControllerコンテキストのナビゲーションバーを変更します。

あれは:

    [self.navigationController.navigationBar setShadowImage:[[UIImage alloc] init]];
[self.navigationController.navigationBar setBackgroundImage:[[UIImage alloc]init] forBarMetrics:UIBarMetricsDefault];

私の場合、これをviewDidLoadに配置します(UINavigationViewControllerの各UIViewControllerにカスタム動作を追加できます)。

48
wolffan

muffed2k answer +プログラミングトーマスコメントに基づいて、これは私がUINavigationBarを背景画像なしで表示するために使用しているものです(ios5.1/6.0)、そして下枠なしで(ios7.0):

  if ([[[UIDevice currentDevice] systemVersion] floatValue] >= 6)
    {
        [[UINavigationBar appearance] setShadowImage:[[UIImage alloc] init]];
        [[UINavigationBar appearance] setBackgroundImage:[[UIImage alloc] init] forBarMetrics:UIBarMetricsDefault];
    }else
    {
        [[UINavigationBar appearance] setBackgroundImage:[[UIImage alloc] init] forBarMetrics:UIBarMetricsDefault];
    }
12
user1105951

Swiftを使用していて、この質問に出くわした場合は、メインのViewControllerでこれを試してください。

override func viewDidLoad() {
    super.viewDidLoad()

    /// ...

    navigationController?.navigationBar.shadowImage = UIImage();
    navigationController?.navigationBar.setBackgroundImage(UIImage(), forBarMetrics: .Default)

    //...
}

上記の@wolffanの回答に基づいて

6
A Fader Darkly

私にとっては、translucentfalseに設定されている場合、iOS 7から9+で動作します

UINavigationBar.appearance().transluscent = false
UINavigationBar.appearance().shadowImage = UIImage()
UINavigationBar.appearance().setBackgroundImage(UIImage(), forBarMetrics:.Default)
4

これに対する受け入れられた答えがすでにあることを知っていますが、それを行う別の方法はclipToBoundsをtrueに設定することです。

これはSwiftでそれを行うためのコードの1行です

self.navigationController?.navigationBar.clipsToBounds = true

魅力のように私のために働いた。

2
user5209290

チャームのように動作します:Swift 3.xバージョン

    navigationController?.navigationBar.shadowImage = UIImage()
    navigationController?.navigationBar.setBackgroundImage(UIImage(), for: .default)
1

objective Cの場合

self.navigationController.navigationBar.clipsToBounds = YES;
1
Aftab

IOS 7をターゲットにしており、背景画像を設定するnotの場合、これは機能します:

        CGFloat navigationBarWidth = self.navigationController.navigationBar.frame.size.width;
        CGFloat navigationBarHeight = self.navigationController.navigationBar.frame.size.height;
        CGFloat statusBarHeight = [UIApplication sharedApplication].statusBarFrame.size.height;

        UIGraphicsBeginImageContextWithOptions(CGSizeMake(navigationBarWidth, navigationBarHeight + statusBarHeight), NO, 0.0);
        UIImage *blank = UIGraphicsGetImageFromCurrentImageContext();
        UIGraphicsEndImageContext();
        [[UINavigationBar appearance] setBackgroundImage:blank forBarMetrics:UIBarMetricsDefault];

        //the following line takes away the border but only works if a background image is set (above)
        [[UINavigationBar appearance] setShadowImage:[[UIImage alloc] init]];

@ muffe2kの答えと this SO post からアイデアを得た。

0
kraftydevil