web-dev-qa-db-ja.com

iOS 7でUINavigationBarの内側の影を削除する方法

内側の影の例

ナビゲーションバーを他のバーの下に配置して、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)を使用しています

21
TOVVV

ナビゲーションバーの下部にある「水平」の線は、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];
}
56
Thyraz

CaptJakが指摘したように、私は本当にすべきではありませんが、行き詰まった他の人のために:

for (UIView *view in self.navigationController.navigationBar.subviews) {
    for (UIView *view2 in view.subviews) {
        if ([view2 isKindOfClass:[UIImageView class]]) {
            [view2 removeFromSuperview];
        }
    }
}

enter image description here

21
Rambatino

Swift(iOS9でテスト済み)

self.navigationController!.navigationBar.setBackgroundImage(UIImage(), forBarMetrics: .Default)
self.navigationController!.navigationBar.shadowImage = UIImage()
9
user3903523

UINavigationBar-Additionと呼ばれるこのUInavigationBarカテゴリを簡単に使用できます here これで説明されているソリューションを使用しました answer ですが、取り除くことができませんでしたnavigationBarの下の1Pxラインの

0
Mohamed Saleh

同様の問題があり、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];
0
Aurelien Cobb

アプリがiOS 6.0以降のみをサポートしている場合は、以下の行を追加するだけです。

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
...
[[UINavigationBar appearance] setShadowImage:[UIImage new]];
...
}
0
ZYiOS