ナビゲーションバーを他のバーの下に配置して、1つの高いナビゲーションバーのように見せようとしています。しかし、iOS 7では、UINavigationBarの上部と下部に内部の影が付きました。私は本当にそれを取り除く必要があります。しかし、私は解決策を見つけられませんでした。シャドウがプリレンダリングされているように見えますが、実際には、ビューが表示されてから約0.4秒後にゆっくりと表示されます。
私はほとんどすべてを試しましたが、影はまだそこにあります。このコードでバーの下の水平線を削除しました:
for (UIView *view in [[[self.navigationController.navigationBar subviews] objectAtIndex:0] subviews]) {
if ([view isKindOfClass:[UIImageView class]]) view.hidden = YES;
}
しかし、どうすれば影を取り除くことができるかわかりません。どうもありがとう!
私はこれを試しました:
[self.navigationController.navigationBar setShadowImage:[[UIImage alloc] init]];
しかし、そのコードではバーの下の水平線も削除されません(このメソッドにはカスタムの背景画像が必要です)。 Xcodeバージョン5.0(5A11365x)を使用しています
ナビゲーションバーの下部にある「水平」の線は、shadowImageです。空のUIImage
を適用することで簡単に削除できます。ドキュメントによると、カスタムの背景画像も設定する必要があります:
- (void)viewDidLoad
{
[super viewDidLoad];
// Set the background and shadow image to get rid of the line.
[self.navigationController.navigationBar setBackgroundImage:[[UIImage alloc] init] forBarMetrics:UIBarMetricsDefault];
self.navigationController.navigationBar.shadowImage = [[UIImage alloc] init];
}
CaptJakが指摘したように、私は本当にすべきではありませんが、行き詰まった他の人のために:
for (UIView *view in self.navigationController.navigationBar.subviews) {
for (UIView *view2 in view.subviews) {
if ([view2 isKindOfClass:[UIImageView class]]) {
[view2 removeFromSuperview];
}
}
}
Swift(iOS9でテスト済み)
self.navigationController!.navigationBar.setBackgroundImage(UIImage(), forBarMetrics: .Default)
self.navigationController!.navigationBar.shadowImage = UIImage()
同様の問題があり、iOS7のナビゲーションバーから1pxの線と影を削除したいと思っていました。私の場合、ナビゲーションバーの下部に3ポイントの太い緑色の線が必要でした。
サブビューのトラバースを含まないナビゲーションバーの下部にある1px行を取り除くソリューションがある場合、私は知りませんが、次のようにその行を非表示にするビューを追加する方法があります(少なくとも線の色はそのように変更できます)。
UIView * bgView = [[UIView alloc] initWithFrame:CGRectMake(0, navBarHeight, navBarWidth, 1)]; // Dont use magic numbers in your code
bgView.backgroundColor = //some other color
[navigationBar addSubview:bgView];
[navigationBar setShadowImage:nil];
アプリがiOS 6.0以降のみをサポートしている場合は、以下の行を追加するだけです。
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
...
[[UINavigationBar appearance] setShadowImage:[UIImage new]];
...
}