2013-09-27 3 views

ответ

45

Если я вас правильно понял попробовать

[[UINavigationBar appearance] setShadowImage:[[UIImage alloc] init]]; 
+0

Да! Спасибо. – Gnamm

+33

Возможно, стоит отметить, что (для iOS 7), чтобы это сработало, вы также должны сделать [[UINavigationBar appearance] setBackgroundImage: [[UIImage alloc] init] forBarMetrics: UIBarMetricsDefault]. –

+4

Это не работает для меня на iOS 7. Я установил для полупрозрачного свойства navbar значение false. Это может быть проблема? –

12

на основе 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]; 
    } 
48

Это не работает на 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).

+0

Благодарим вас за обновленный ответ и ссылку на документацию. – JVillella

+2

В моем случае это ответ, который сработал, а не первый. Спасибо за код и документацию. –

+1

Использование внешнего вида, похоже, отлично работает на 7+, но вам нужно будет установить как «shadowImage», так и «backgroundShadowImage» – bloudermilk

0

Если вы ориентируетесь 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 Ответим и this SO post.

+0

Любая обратная связь при голосовании? – kraftydevil

5

Если вы используете Swift и вы столкнетесь с этим вопросом, попробуйте это в главном ViewController:

override func viewDidLoad() { 
    super.viewDidLoad() 

    /// ... 

    navigationController?.navigationBar.shadowImage = UIImage(); 
    navigationController?.navigationBar.setBackgroundImage(UIImage(), forBarMetrics: .Default) 

    //... 
} 

на основе @ wolffan отвечают выше

2

Я знаю, что есть принят ответ на этот вопрос уже, но другой способ сделать это - установить clipToBounds в true.

Вот одна строка кода, чтобы сделать это в быстрой

self.navigationController?.navigationBar.clipsToBounds = true 

работал для меня как шарм.

+2

он может разорвать фон состояния, вспомните вас –

+0

@ user5209290 верен. Моя строка состояния больше не смешивается с навигационной панелью при отсечении до границ панели навигации. – Daniel

4

Для меня follwing работал над прошивкой 7 до 9+ когда translucent установлен в false

UINavigationBar.appearance().transluscent = false 
UINavigationBar.appearance().shadowImage = UIImage() 
UINavigationBar.appearance().setBackgroundImage(UIImage(), forBarMetrics:.Default) 
+0

Я думаю, что вам не хватает периода для .Default – noobular

1

для Objective C

self.navigationController.navigationBar.clipsToBounds = YES; 
1

работает как шарм: Swift 3.x версия

navigationController?.navigationBar.shadowImage = UIImage() 
    navigationController?.navigationBar.setBackgroundImage(UIImage(), for: .default) 
Смежные вопросы