Измените высоту UITabBar

Я использую 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высота для достижения чего-то вроде этого:?

enter image description here

60
задан 21 March 2018 в 19:39

3 ответа

Ответы отредактированного Эскера 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
}
1
ответ дан 31 October 2019 в 16:35

РАБОТЫ СО ВСЕМИ РАЗМЕРАМИ ЭКРАНА: Установите 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
    }
2
ответ дан 31 October 2019 в 16:35

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
}
}
7
ответ дан 31 October 2019 в 16:35

Другие вопросы по тегам:

Похожие вопросы: