Я использую UITabBarController
как корневое представление и поддержки приложений iOS 6 и выше. Иерархия классов проекта как ниже.
UITabBarController
- tab1
- UINavigationController
- UIViewController
- UIViewController
.
.
- tab2
- UINavigationController
- UIViewController
- UIViewController
.
.
.
- tab3
- UIViewController
- tab4
- UIViewController
Я раньше ниже кода изменял высоту UITabBar
в одном из UIViewControllers (который является внутри UINavigationController
) в вышеупомянутой иерархии.
CGRect tabbarFrame = self.tabBarController.tabBar.frame;
tabbarFrame.size.height += 60;
self.tabBarController.tabBar.frame = tabbarFrame;
Но не изменение высоты. UITabBar
отображен с высотой по умолчанию. Хотя вход его печати значения изменил значение как показано ниже.
<UITabBar: 0xb528f60; frame = (0 431; 320 109); autoresize = W+TM; layer = <CALayer: 0xb529080>>
Как я могу измениться UITabBar
высота для достижения чего-то вроде этого:?
Ответы отредактированного Эскера Kiarash с использованием Безопасной области:
override func viewWillLayoutSubviews() {
super.viewWillLayoutSubviews()
var safeAreaBottomInset: CGFloat = 0.0
if #available(iOS 11.0, *) {
safeAreaBottomInset = view.safeAreaInsets.bottom
}
let newTabBarHeight: CGFloat = {{myDesiredHeight}} + safeAreaBottomInset
var newFrame = tabBar.frame
newFrame.size.height = newTabBarHeight
newFrame.origin.y = view.frame.size.height - newTabBarHeight
tabBar.frame = newFrame
}
РАБОТЫ СО ВСЕМИ РАЗМЕРАМИ ЭКРАНА: Установите tabBarHeight на (исходная высота панели вкладок - 20) это важно, таким образом, можно использовать его позже в viewDidLayoutSubviews, также лучше, чем трудное кодирование размера, который Вы хотите. Так как тот размер не мог бы работать над всеми экранами.
Окно безопасные вставки области сохраняют необходимое дополнение у основания высоты панели вкладок для поддержания расстояния от базового края экрана.
var tabBarHeight = CGFloat()
override func viewDidLoad() {
super.viewDidLoad()
tabBarHeight = self.tabBar.frame.height - 20
}
override func viewDidLayoutSubviews() {
super.viewDidLayoutSubviews()
var tabFrame = self.tabBar.frame
guard let window = UIApplication.shared.keyWindow else {return}
tabFrame.size.height = tabBarHeight + window.safeAreaInsets.bottom
self.tabBar.frame = tabFrame
}
Swift 4 & совместимый с iPhone x
class CustomTabBar : UITabBar {
@IBInspectable var height: CGFloat = 65.0
override open func sizeThatFits(_ size: CGSize) -> CGSize {
guard let window = UIApplication.shared.keyWindow else {
return super.sizeThatFits(size)
}
var sizeThatFits = super.sizeThatFits(size)
if height > 0.0 {
if #available(iOS 11.0, *) {
sizeThatFits.height = height + window.safeAreaInsets.bottom
} else {
sizeThatFits.height = height
}
}
return sizeThatFits
}
}