Как правильно центрировать элементы UITabBar по вертикали для UITabBar с большей высотой и без заголовков элементов?

#swift #xcode #uikit

#swift #xcode #uikit

Вопрос:

Я работаю над пользовательским UITabBar, который имеет большую высоту, пользовательскую тень и без заголовков элементов.

Я использую следующий код для своего пользовательского класса UITabBar для достижения этого, например:

 class CustomUITabBar: UITabBar {

    @IBInspectable private var height: CGFloat = .zero

    override func sizeThatFits(_ size: CGSize) -> CGSize {
        guard let window = UIApplication.shared.windows.first else {
            return super.sizeThatFits(size)
        }
        var sizeThatFits = super.sizeThatFits(size)
        if #available(iOS 11.0, *) {
            sizeThatFits.height = height   window.safeAreaInsets.bottom
        } else {
            sizeThatFits.height = height
        }
        return sizeThatFits
    }
}
  

Вот результат: на iPhone с надрезом (iPhone X, XS, 11 и т. Д.) Все выглядит нормально, значки центрируются правильно, вот так:

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

Но на iPhone, у которых вместо этого есть кнопка home, элементы панели вкладок неправильно центрируются по вертикали. Есть ли решение для этого?

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

Ответ №1:

Теперь они не центрированы, как я вижу, на обоих устройствах. Вы можете поиграть с этим кодом:

 guard let items = tabBar.items else { return }
                
                for item in items {
                    item.imageInsets = UIEdgeInsets(top: 0, left: 0, bottom: 0, right: 0)
                }
  

он настраивает изображение TabBarItem 🙂

С этими настройками они будут центрироваться в каждом элементе TabBarItem.

Комментарии:

1. Спасибо за усилия, но этот код ничего не изменил : (