iOS 7 tabBar-line, как убрать?

Apple добавила крошечную линию над tabBar в iOS 7, которая должна работать как тень или исчезать между tabBar и пользовательским интерфейсом.

введите описание изображения здесь

Поскольку я использую специально созданный tabBar, эта строка довольно раздражает. Как его удалить? Пожалуйста, скажите мне, что это возможно, иначе мне нужно переделать все мое приложение, лол ....

/ С Уважением

* Изменить

Я решил проблему со следующей строкой кода:

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

person Jesper Martensson    schedule 22.09.2013    source источник
comment
Ответ holex сработал для меня как чудо ^ _ ^   -  person Pradeep Mittal    schedule 03.01.2015
comment
Возможный дубликат Удалите горизонтальный разделитель UITabBar в iOS7   -  person QED    schedule 10.03.2016


Ответы (12)


Этот код работает для меня очень хорошо (у меня действительно нет фонового изображения для панели вкладок):

[tab_main.tabBar setBackgroundImage:[[UIImage alloc] init]];
[[UITabBar appearance] setShadowImage:[[UIImage alloc] init]];

И я использую этот код, чтобы добавить фрейм:

UIColor* color_green = UIColorFromRGB(0x348e5b);
tab_main.tabBar.layer.borderWidth = 0.50;
tab_main.tabBar.layer.borderColor = color_green.CGColor;
[[UITabBar appearance] setTintColor:color_green];

Надеюсь, это поможет.

person superarts.org    schedule 29.04.2014

В iOS 8 верхнюю границу можно удалить, установив черный цвет панели вкладок в инспекторе.

person Upvote    schedule 03.11.2014
comment
Ну, он не удаляет его, а делает его белым, у меня есть большая центральная кнопка, и она режет прямо, хотя она - person Raheel Sadiq; 19.01.2016

Swift

Хорошее простое решение:

Напишите этот код ниже в своем классе пользовательской панели вкладок. Тогда он скроет горизонтальную линию тени.

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

Цель C

[self.tabBar setValue:@(YES) forKeyPath:@"_hidesShadow"];
person Sourabh Sharma    schedule 27.10.2015
comment
Частный API не рекомендуется. - person DawnSong; 08.03.2016

Я не вижу в UITabBar API ничего, что могло бы повлиять на этот разделитель, но если разделитель находится в UITabBar (подкласс UIView), я ожидаю, что вы можете вставить новый UIView высотой в один пиксель поверх него. Вам нужно будет взять часть изображения, которое вы хотите разместить там, и нарисовать его в новом представлении. И я не уверен, что UITabBar каким-то образом предотвратит добавление подпредставления или не позволит подпредставлению быть наверху. Но с этого я бы начал.

person bneely    schedule 22.09.2013
comment
Установка shadowImage на чистое изображение должна избавить от него, при условии, что у вас также установлен backgroundImage - person iccir; 22.09.2013

Добавьте следующий код в метод AppDelegate.m didFinishLaunchingWithOptions:

if ([[[UIDevice currentDevice] systemVersion] floatValue]>=7.0)
 [[UITabBar appearance] setShadowImage:[[UIImage alloc] init]];
person Teja Kumar B    schedule 19.03.2014

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

UIImage* tabBarBackground = [UIImage new];
if(!OSVersionIsAtLeastiOS7())
{
    tabBarBackground = [UIImage imageNamed:@"whitebg"];
}
[[UITabBar appearance] setShadowImage:tabBarBackground];

[[UITabBar appearance] setBackgroundImage:tabBarBackground];
person Zoeb S    schedule 23.06.2014

 [_tabBarController.tabBar setBackgroundImage:[UIImage imageNamed:@"tabtarsprnt"]]; //your custom image
[self.tabBarController.tabBar setClipsToBounds:YES];

этот код также решил мою проблему

person Daxesh Nagar    schedule 03.07.2015

В моем случае мне также нужно было установить другую тень, в конце концов, единственное, что сработало при настройке собственной тени, - это добавить одноточечную высокую точку UIView 1 над панелью вкладок:

    UIView *whiteLine = [[UIView alloc] initWithFrame:CGRectMake(0.0, -1.0, self.tabBar.frame.size.width, 1.0)];
    whiteLine.backgroundColor = [UIColor whiteColor];
    [self.tabBar addSubview:whiteLine];
person Jeroen    schedule 16.03.2017

Попробуйте это, ** 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: (если используется фоновое изображение по умолчанию, будет использоваться изображение тени по умолчанию).

person Krunal    schedule 07.05.2018

теперь вы можете использовать его с этой строкой:

self.tabBarController.tabBar.barStyle = UIBarStyleBlack; 
person E.Chaman    schedule 07.05.2018

person    schedule
comment
Примечание. Если вы setShadowImage, он займет некоторое пространство над контроллером панели вкладок. Лучше использовать [[UITabBar appearance] setShadowImage:[[UIImage alloc] init]; для создания пустого и прозрачного UIImage. - person Raptor; 24.04.2014
comment
@Raptor Ты гений. - person DawnSong; 08.03.2016

person    schedule
comment
Этот код сбивает с толку. Имя переменной tabBar, но вы инициализируете на нем UITabBarController. - person Raptor; 24.04.2014
comment
Мое предложение: переименуйте переменную в tabBarController, чтобы избежать путаницы - person Raptor; 25.04.2014
comment
tabBar является объектом UITabBarController. Это означает, что @property (неатомный, сохранить) UITabBarController * tabBar; Я изменил имя tabBar на tabBarController (@property (nonatomic, keep) UITabBarController * tabBarController). Теперь вы можете понять код без путаницы. - person dineshthamburu; 25.04.2014