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

IOS UITabBar: удалить верхнюю линию градиента тени

Я реализовал пользовательский UITabBar, и у меня все еще есть этот градиент/тень поверх него. Я добавил

[self.tabBar setBackgroundImage:[UIImage imageNamed:@"navBarBottom.png"]];

который просто меняет фон, но сохраняет градиент тени.

Что я делаю неправильно? Можно ли что-то указать, чтобы избавиться от него?

Что у меня:

top shadow

Что я хочу:

without shadow

Спасибо.

4b9b3361

Ответ 1

Попробуйте установить прозрачное теневое изображение размером 1x1 пиксель для UITabBar:

[[UITabBar appearance] setShadowImage:[UIImage imageNamed:@"transparentShadow.png"]];

Ответ 2

Similary в ответ на этот вопрос... если вы не хотите связываться с каким-либо прозрачным изображением 1x1, эта работа тоже:

[[UITabBar appearance] setBackgroundImage:[[UIImage alloc] init]]; 
[[UITabBar appearance] setShadowImage:[[UIImage alloc] init]];

В быстрой:

UITabBar.appearance().shadowImage = UIImage()
UITabBar.appearance().backgroundImage = UIImage()

Ответ 3

Swift

Попробуйте это для своей панели вкладок. Он будет скрывать горизонтальную линию тени.

self.tabBar.setValue(true, forKey: "_hidesShadow")

Цель C

[self.tabBar setValue:@(YES) forKeyPath:@"_hidesShadow"];

Ответ 4

Swift 4

UITabBar.appearance().layer.borderWidth = 0.0
UITabBar.appearance().clipsToBounds = true

Ответ 5

Вызов [[UITabBar appearance] setShadowImage:] будет настраивать все экземпляры UITabBar в вашем приложении.

Если вы хотите настроить только один UITTabBar, вы можете сделать это:

[self.tabBarController.navigationController.navigationBar setShadowImage:[UIImage new]];

Ответ 6

Вот еще один простой в реализации ответ:

[self.tabBar setValue:@(YES) forKeyPath:@"_hidesShadow"];

работал на меня.

Ответ 7

Просто установите изображение, оно не удалит теневую линию, вы должны установить его borderWidth на 0. Вот код

[[Внешний вид UITabBar] setShadowImage: [UIImage new]];

[UITabBar внешний вид].layer.borderWidth = 0.0f;

[UITabBar появление].clipsToBounds = true;

Ответ 8

Этот код работает как для iOS 13, так и ниже

if #available(iOS 13, *) {
    let appearance = self.tabBar.standardAppearance.copy()
    appearance.backgroundImage = UIImage()
    appearance.shadowImage = UIImage()
    appearance.shadowColor = .clear
    self.tabBar.standardAppearance = appearance
} else {
    self.tabBar.backgroundImage = UIImage()
    self.tabBar.shadowImage = UIImage()
}

Ответ 9

Поместите это в свой AppDelegate в doneFinishLaunchingWithOptions:

[[UITabBar appearance] setShadowImage:[[UIImage alloc] init]];
[[UITabBar appearance] setBackgroundImage:[[UIImage alloc] init]];

Ответ 10

Попробуйте это, ** Objective-C **

//Remove shadow image by assigning nil value.
[[UITabBar appearance] setShadowImage: nil];

// or 

// Assing UIImage instance without image reference
[[UITabBar appearance] setShadowImage: [[UIImage alloc] init]];

** Swift **

//Remove shadow image by assigning nil value.
UITabBar.appearance().shadowImage = nil

// or 

// Assing UIImage instance without image reference
UITabBar.appearance().shadowImage = UIImage()


Вот яблочный ориентир для shadowImage.

@available(iOS 6.0, *)
open var shadowImage: UIImage?

Значение по умолчанию равно нулю. Когда не-nil, вместо теневого изображения вместо теневое изображение по умолчанию. Чтобы пользовательский тень отображалась, пользовательский фоновое изображение также должно быть установлено с -setBackgroundImage: (если используется фоновое изображение по умолчанию, теневое изображение по умолчанию будет используется).

Ответ 11

Я добился того же взгляда с помощью следующего метода.
1. Установите цвет фона панели цвета таким же, как и цвет фона основного родительского представления.
2.

this.TabBar.BarStyle = UIBarStyle.BlackOpaque;

Я использовал его в Xamarin. Пожалуйста, проверьте синтаксис Swift.

Ответ 12

В вашем представлении контроллеры или контроллеры представлений или BasicViewController, которые большинство обработчиков view наследуют в viewDidLoad, просто поместите эти две строки:

[[UITabBar appearance] setBackgroundImage:[UIImage imageNamed:@"tab_bar_background"]];
[[UITabBar appearance] setShadowImage:[UIImage imageNamed:@"transparent_shadow"]];

Убедитесь, что [email protected] - это изображение 1x1 или 2x2, а [email protected] - это изображение 640x100, поскольку нижняя панель имеет высоту 50 пикселей.

Работает на iOS 9.3

Ответ 13

Попробуйте это на viewDidload.

override func viewDidLoad() {
        super.viewDidLoad()

        self.tabBar.setValue(true, forKey: "_hidesShadow")
}

Это работает для меня

Ответ 14

В iOS 7 - это работает:

[self.actionToolbar setShadowImage:[[UIImage alloc] init] forToolbarPosition:UIBarPositionAny];
[self.actionToolbar setBackgroundImage:[[UIImage alloc] init] forToolbarPosition:UIBarPositionAny barMetrics:UIBarMetricsDefault];

Надеюсь, что это поможет кому-то.