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

Удалить нижнюю границу панели навигации iOS7

Есть ли способ удалить нижнюю границу, которую iOS7 автоматически отображает под навигационной панелью?

4b9b3361

Ответ 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 сообщение.