it-swarm.com.ru

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

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

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

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

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

Что я имею :

top shadow

Что я хочу : 

without shadow

Спасибо.

37
httpete

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

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

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

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

В Свифте:

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

Свифт

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

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

Цель C

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

Swift 4

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

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

[[UITabBar появление] setShadowImage: [UIImage новый]];

[UITabBar появление] .layer.borderWidth = 0.0f;

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

2
Nazim Siddiqui

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

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

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

2
dbv

Поместите это в ваш AppDelegate под didFinishLaunchingWithOptions :

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

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

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

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

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

override func viewDidLoad() {
        super.viewDidLoad()

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

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

0
anhtran

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

[[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

0
Catalin

Попробуйте это, ** 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]];

** Свифт **

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

// or 

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


Вот руководство Apple для shadowImage .

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

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

0
Krunal