Как удалить внутреннюю тень 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)
Ответы
Ответ 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 под навигационной панелью