Черный фон на прозрачном UITabBar
Я пытаюсь сделать размытый фон UITabBar
для моего UITabViewController
, и идея состоит в том, чтобы он был размытым и прозрачным, чтобы можно было просмотреть прокрутки.
К сожалению, я не могу на всю жизнь меня заставить панель вкладок быть прозрачной. Независимо от того, что я делаю, на панели вкладок всегда есть черный фон, который предотвращает отображение основных контроллеров представлений.
Если я изменил альфа UITabBar
на что-то низкое, я вижу, что табличное представление действительно стоит за ним, однако вы можете видеть, что UITabBar
имеет какой-то фон, который предотвращает полное отображение таблицы (и я не хочу, чтобы элементы кнопки были невидимыми, только фон панели вкладок).
![alpha 0.3 tab bar]()
Как это может быть?
В пользовательском представлении панели вкладок загрузился я:
self.tabBar.translucent = true
self.tabBar.alpha = 0.3
self.tabBar.backgroundColor = UIColor.clearColor().colorWithAlphaComponent(0.0)
self.tabBar.layer.backgroundColor = UIColor.clearColor().colorWithAlphaComponent(0.0).CGColor
self.tabBar.backgroundImage = nil
self.tabBar.shadowImage = nil
и в AppDelegate у меня есть:
UITabBar.appearance().barTintColor = UIColor.clearColor()
UITabBar.appearance().tintColor = kColorAccent
UITabBar.appearance().translucent = true
UITabBar.appearance().translucent = true
UITabBar.appearance().backgroundColor = UIColor.clearColor()
UITabBar.appearance().backgroundImage = nil
UITabBar.appearance().layer.backgroundColor = UIColor.clearColor().CGColor
UITabBar.appearance().shadowImage = nil
... да Это чрезмерно, но я хочу попробовать все.
Любые идеи о том, что делать?
Ответы
Ответ 1
Сделать прозрачным UITabBar
Назначьте четкое изображение его backgroundImage
. Вы можете использовать 1x1 clear.png или создать программно:
self.backgroundImage = UIImage.imageWithColor(UIColor.clearColor())
Это сделает UITabBar
прозрачным:
![Прозрачный]()
Добавить эффект размытия
Вставьте UIVisualEffectView
в качестве заднего подсмотра.
let frost = UIVisualEffectView(effect: UIBlurEffect(style: .Light))
frost.frame = self.bounds
self.insertSubview(frost, atIndex: 0)
Вставьте UIBlurEffect
(frost):
![Frost]()
Пример
![Морозная панель инструментов]()
- Установите Пользовательский класс для
UITabBar
контроллера панели вкладок на FrostyTabBar
.
- У вас есть несколько вариантов доставки изображения
clearColor
. Вы можете создать образ clear.png с альфой из 0. Программное элегантное решение описано здесь.
- Если вы используете clear.png, назначьте его в Фоновое изображение в Инспекторе атрибутов:
![введите описание изображения здесь]()
- В интерфейсе Builder выберите Стиль: по умолчанию и полупрозрачный.
- Как только вы возьмете управление размытием фона с помощью
UIVisualEffectView
, вы можете, в свою очередь, предоставить любой UIVisualEffect
, который вы так желаете.
Весь класс FrostyTabBar
выглядит следующим образом:
import UIKit
class FrostyTabBar: UITabBar {
required init?(coder aDecoder: NSCoder) {
super.init(coder: aDecoder)
let frost = UIVisualEffectView(effect: UIBlurEffect(style: .light))
frost.frame = bounds
frost.autoresizingMask = .flexibleWidth
insertSubview(frost, at: 0)
}
}
► Найдите это решение на GitHub и дополнительные сведения, включая 1x1 clear.png на Swift Recipes.
Ответ 2
Я нашел решение префекта, вам нужно только подклассировать UITabBar, а затем выполнить следующие действия, чтобы очистить эти досадные представления
class MainTabBar: UITabBar {
var cleanDone = false
override func layoutSubviews() {
super.layoutSubviews()
self.deleteUnusedViews()
}
func deleteUnusedViews() {
if !self.cleanDone {
var removeCount = 0
for (_, eachView) in (self.subviews.enumerate()) {
if NSStringFromClass(eachView.classForCoder).rangeOfString("_UITabBarBackgroundView") != nil {
eachView.removeFromSuperview()
removeCount += 1
}
if NSStringFromClass(eachView.classForCoder).rangeOfString("UIImageView") != nil {
eachView.removeFromSuperview()
removeCount += 1
}
if removeCount == 2 {
self.cleanDone = true
break
}
}
}
}
}
Ответ 3
imageWithColor был заменен на jotImage
let size = CGSize(width: tabBar.bounds.size.width,
height: tabBar.bounds.size.height)
tabBar.backgroundImage = UIImage.jotImage(with: UIColor.clear, size: size)
Ответ 4
единственное решение, которое работало для меня, было это:
UITabBar.appearance().shadowImage = UIImage()
UITabBar.appearance().backgroundImage = UIImage()
и установите: (вы также можете сделать это в раскадровке)
UITabBar.appearance().barTintColor = UIColor.clear
но то, что я должен установить в раскадровке:
- панель вкладок: полупрозрачный → правда
Ответ 5
Также не забудьте снять флажок "Непрозрачный", чтобы сделать TabBar прозрачным: TabBar