Подтвердить что ты не робот

Как удалить внутреннюю тень UINavigationBar в iOS 7?

Внутренний теневой пример

Я пытаюсь поставить навигационную панель ниже другой, чтобы она выглядела как один высокий навигационный бар. Но в 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 Version 5.0 (5A11365x)

4b9b3361

Ответ 1

"Горизонтальная" линия в нижней части навигационной панели - это просто 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];
}

Ответ 2

Я действительно не должен, как указал 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

Ответ 3

В Swift (проверен на iOS9)

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

Ответ 4

Если ваше приложение поддерживает только iOS 6.0+, вы можете просто добавить строку ниже:

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

Ответ 5

У меня была аналогичная проблема, когда я хотел удалить строку 1px и тень из панели навигации на iOS7. В моем случае мне понадобилась зеленая линия с тремя точками в нижней части панели навигации.

Если есть решение избавиться от строки 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];

Ответ 6

Вы можете легко использовать эту категорию UInavigationBar под названием UINavigationBar-Addition найденную здесь Я использовал решение, описанное в этом ответе, но я не мог избавиться от строки 1Px под навигационной панелью