Есть ли способ удалить нижнюю границу, которую iOS7 автоматически отображает под навигационной панелью?
Удалить нижнюю границу панели навигации iOS7
Ответ 1
Если вы правильно поняли, попробуйте
[[UINavigationBar appearance] setShadowImage:[[UIImage alloc] init]];
Ответ 2
Это не работает на iOS7 с прозрачной навигацией или нет...
Вставка из документации Apple;
Описание Теневое изображение, которое будет использоваться для панели навигации. Значение по умолчанию равно nil, что соответствует теневому изображению по умолчанию. Когда не-nil, это свойство представляет собой настраиваемое изображение теней для отображения вместо значения по умолчанию. Для отображения пользовательского теневого изображения пользовательское фоновое изображение также должно быть установлено с помощью метода setBackgroundImage: forBarMetrics:. Если используется фоновое изображение по умолчанию, то теневое изображение по умолчанию будет использоваться независимо от значения этого свойства.
Итак, в основном вам нужно реализовать этот setBackgroundImage. Дополнительная заметка, на iOS7 вы больше не будете использовать внешний вид, но вы измените панель навигации в контексте viewController, где вы сейчас находитесь.
То есть:
[self.navigationController.navigationBar setShadowImage:[[UIImage alloc] init]];
[self.navigationController.navigationBar setBackgroundImage:[[UIImage alloc]init] forBarMetrics:UIBarMetricsDefault];
В моем случае я помещаю это в viewDidLoad (пользовательское поведение может быть добавлено для каждого UIViewController в UINavigationViewController).
Ответ 3
на основе muffed2k ответ + программирование Томас комментарий, это то, что я использую, чтобы показать 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];
}
Ответ 4
Если вы используете Swift, и вы сталкиваетесь с этим вопросом, попробуйте это в своем основном ViewController:
override func viewDidLoad() {
super.viewDidLoad()
/// ...
navigationController?.navigationBar.shadowImage = UIImage();
navigationController?.navigationBar.setBackgroundImage(UIImage(), forBarMetrics: .Default)
//...
}
Основываясь на ответе @wolffan выше
Ответ 5
Для меня работала на iOS 7 до 9+, когда translucent
установлен на false
UINavigationBar.appearance().transluscent = false
UINavigationBar.appearance().shadowImage = UIImage()
UINavigationBar.appearance().setBackgroundImage(UIImage(), forBarMetrics:.Default)
Ответ 6
Я знаю, что есть уже принятый ответ на этот вопрос, но другой способ сделать это - установить для clipToBounds значение true.
Вот одна строка кода, чтобы сделать это быстрым
self.navigationController?.navigationBar.clipsToBounds = true
Работал для меня как шарм.
Ответ 7
для объективного c
self.navigationController.navigationBar.clipsToBounds = YES;
Ответ 8
Работает как шарм: версия Swift 3.x
navigationController?.navigationBar.shadowImage = UIImage()
navigationController?.navigationBar.setBackgroundImage(UIImage(), for: .default)
Ответ 9
Если вы настроите iOS 7 и не установили фоновое изображение, это будет работать:
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 и этот SO сообщение.