IOS7がナビゲーションバーの下に自動的に表示する下の境界線を削除する方法はありますか?
正しく理解できたら
[[UINavigationBar appearance] setShadowImage:[[UIImage alloc] init]];
ナビゲーションが半透明かどうかにかかわらず、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にカスタム動作を追加できます)。
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];
}
Swiftを使用していて、この質問に出くわした場合は、メインのViewControllerでこれを試してください。
override func viewDidLoad() {
super.viewDidLoad()
/// ...
navigationController?.navigationBar.shadowImage = UIImage();
navigationController?.navigationBar.setBackgroundImage(UIImage(), forBarMetrics: .Default)
//...
}
上記の@wolffanの回答に基づいて
私にとっては、translucent
がfalse
に設定されている場合、iOS 7から9+で動作します
UINavigationBar.appearance().transluscent = false
UINavigationBar.appearance().shadowImage = UIImage()
UINavigationBar.appearance().setBackgroundImage(UIImage(), forBarMetrics:.Default)
これに対する受け入れられた答えがすでにあることを知っていますが、それを行う別の方法はclipToBoundsをtrueに設定することです。
これはSwiftでそれを行うためのコードの1行です
self.navigationController?.navigationBar.clipsToBounds = true
魅力のように私のために働いた。
チャームのように動作します:Swift 3.xバージョン
navigationController?.navigationBar.shadowImage = UIImage()
navigationController?.navigationBar.setBackgroundImage(UIImage(), for: .default)
objective Cの場合
self.navigationController.navigationBar.clipsToBounds = YES;
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 からアイデアを得た。