Как изменить верхнюю границу моего UITabBar?

Я хочу, чтобы UITabBar имел верхнюю границу ширины 5.0. Граница должна быть желтого цвета. Я не хочу никаких границ слева/снизу/справа.

Граница панели вкладок должна быть плоской (никаких теней или чего-либо подобного).

Как удалить тень (изображение)?

Ответ 1

Вы можете сделать это таким образом в своем FirstViewController.swift:

self.tabBarController!.tabBar.layer.borderWidth = 0.50
self.tabBarController!.tabBar.layer.borderColor = UIColor.clearColor().CGColor
self.tabBarController?.tabBar.clipsToBounds = true

И результат будет:

До:

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

После:

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

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

EDIT:

Вы можете установить фоновое изображение таким образом:

UITabBar.appearance().backgroundImage = UIImage(named: "yourImageWithTopYellowBorder.png")

Ответ 2

Это полное решение, составленное из разных ответов SO, которое сработало для меня (Swift 3):

// The tabBar top border is done using the `shadowImage` and `backgroundImage` properties.
// We need to override those properties to set the custom top border.
// Setting the `backgroundImage` to an empty image to remove the default border.
tabBar.backgroundImage = UIImage()
// The `shadowImage` property is the one that we will use to set the custom top border.
// We will create the `UIImage` of 1x5 points size filled with the red color and assign it to the `shadowImage` property.
// This image then will get repeated and create the red top border of 5 points width.

// A helper function that creates an image of the given size filled with the given color.
// http://stackoverflow.com/a/39604716/1300959
func getImageWithColor(color: UIColor, size: CGSize) -> UIImage
{
    let rect = CGRect(origin: CGPoint(x: 0, y: 0), size: CGSize(width: size.width, height: size.height))
    UIGraphicsBeginImageContextWithOptions(size, false, 0)
    color.setFill()
    UIRectFill(rect)
    let image: UIImage = UIGraphicsGetImageFromCurrentImageContext()!
    UIGraphicsEndImageContext()
    return image
}

// Setting the `shadowImage` property to the `UIImage` 1x5 red.
tabBar.shadowImage = getImageWithColor(color: UIColor.red, size: CGSize(width: 1.0, height: 5.0))

Ответ 3

Если вы хотите полностью удалить панель вкладок, поместите это в свой AppDelegate:

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

Ответ 4

SWIFT 3

Мне нужны границы границ (и цвета линий и веса), чтобы соответствовать другим элементам в моем приложении, поэтому это сработало для меня в моем пользовательском UITabBarController viewDidLoad:

tabBar.layer.borderWidth = 0.3
tabBar.layer.borderColor = UIColor(red:0.0/255.0, green:0.0/255.0, blue:0.0/255.0, alpha:0.2).cgColor
tabBar.clipsToBounds = true

Ответ 5

    UIView *borderLine = [[UIView alloc] initWithFrame:CGRectMake(0, 0, screenWidth, 5.0)];
    borderLine.backgroundColor = [UIColor yellowColor];  
    [self.tabBarController.tabBar addSubview:borderLine];

Это способ добавить границу к UITabBar, которой я следую. Он работает классно.

Ответ 6

Просто установите для UITabBar backgroundImage и shadowImage четкий цвет:

tabBar.shadowImage = UIImage.init(color: UIColor.clear)
tabBar.backgroundImage = UIImage.init(color: UIColor.clear)

Ответ 7

В iOS 6 есть свойство с именем shadowImage. Вы можете изменить это, чтобы изменить верхнюю границу. Например, вы можете использовать изображение 1x1px с одним цветом, чтобы изменить верхнюю границу этого цвета:

UITabBar.appearance().shadowImage = UIImage(named: "TabBarShadow")

Вы также можете установить его как просто UIImage(), чтобы полностью удалить верхнюю границу.

UITabBar.appearance().shadowImage = UIImage()

Чтобы ответить на вопрос о границе 5px, это можно сделать, используя изображение 1x5px. Как правило, размер изображения не ограничен, и он будет просто повторяться (так что вы могли бы иметь пунктирную линию, например, имея изображение 4x5px, где первые 2x5px черные, а следующие 2x5px прозрачны). Обратите внимание: если вы используете это, он выходит за пределы UITabBar, поэтому содержимое будет заходить за изображение, если вы не измените границы представления.

Ответ 8

Это теневое изображение (свойство) вкладки. Попробуйте следующие решения и посмотрите.

** Swift **

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

// or 

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

** 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]];


Вот рекомендация apple для shadowImage.

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

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

Ответ 9

Вот как я это сделал. Я добавил подпредставление поверх UITabBar.

var lineView = UIView(frame: CGRect(x: 0, y: 0, width:tabBarController.tabBar.frame.size.width, height: 1))
lineView.backgroundColor = UIColor.yellow
tabBarController.tabBar.addSubview(lineView)