Как исправить проблему высоты панели вкладок на iPhone X

У меня проблема с моим приложением при тестировании на iPhone X. Я не уверен, как настроить эту проблему, а также не сделать ее проблемой для размеров iPhone X. Это только кажется проблемой на симуляторе iPhone X.

enter image description here

enter image description here

12 ответов


"File inspector"

"инспектор файлов" справа от раскадровки XCode, включите макет Safe Area guide для поддержки вашего приложения в iPhone

этот пост описывает очень хорошо.


создать отдельный файл с кодом

extension UITabBar {
override open func sizeThatFits(_ size: CGSize) -> CGSize {
    super.sizeThatFits(size)
    guard let window = UIApplication.shared.keyWindow else {
        return super.sizeThatFits(size)
    }
    var sizeThatFits = super.sizeThatFits(size)
    sizeThatFits.height = window.safeAreaInsets.bottom + 40
    return sizeThatFits
}

}

тогда используйте его в viewDidLayoutSubviews


Я столкнулся с той же проблемой. К счастью, меня спасает следующий пост. Я уверен, что вы можете решить свою проблему с ним.

https://novemberfive.co/blog/apple-september-event-iphonex-apps/

метод, использующий базовый вид для UITabBar для заполнения нижней области, устраняет проблему, от которой вы страдаете.


решение для меня было в том, что у меня был пользовательский набор высоты UITabBar, что-то вроде этого:

  override func viewWillLayoutSubviews() {            
        var tabFrame = tabBar.frame
        tabFrame.size.height = 60
        tabFrame.origin.y = self.view.frame.size.height - 60
        tabBar.frame = tabFrame
    }

удалите его, и панель вкладок будет отображаться правильно на iPhone X.


это сработало для меня, поскольку я использую изображение выбора.

    tabBar.selectionIndicatorImage = UIImage.imageWithColor(color: UIColor.NewDesignColor.yellow, size: tabBarItemSize).resizableImage(withCapInsets: UIEdgeInsets.init(top: 0, left: 0, bottom: 20, right: 0))

добавление нижней вставки помогает в моем случае. Надеюсь, это сработает и для вас. Спасибо.


для iOS 11.3 это сработало для меня:

func viewDidLayoutSubviews() {
    super.viewDidLayoutSubviews()
    tabBar.invalidateIntrinsicContentSize()
}

просто выровняйте нижнюю часть UITabBar с супервизором, а не с безопасной областью. Если вы выровняете его по безопасной области, это будет так:

Align to safe area

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

Align to Superview

Я думаю, это потому, что Apple дала элементам панели вкладок поле по умолчанию внизу, если оно находится на iPhone X, поскольку они хотят, чтобы панель вкладок была расширена до нижней части экрана, чтобы избегайте плавающего бара.


invalidateIntrinsicContentSize UITabBar в viewWillLayoutSubviews, которые могут вам помочь.

 override func viewWillLayoutSubviews() {
    super.viewWillLayoutSubviews()
    self.tabBar.invalidateIntrinsicContentSize()
}

В Ограничениях -

Если вы даете нижнее пространство с "Нижним руководством по компоновке", то эта проблема возникнет.

устранение:

дайте нижнее пространство по отношению к superview. Это будет работать на 100% идеально.


У меня была похожая проблема. Я устанавливал selectionIndicatorImage в viewDidLoad (). Перемещение кода в viewDidLayoutSubviews () исправило мою проблему.


следуйте инструкциям ниже для установки uitabbar selectionIndicatorImage.

  1. UITabBar.внешний вид.)(selectionIndicatorImage = #YOUR_IMAGE
  2. убедитесь, что высота изображения 48.

высота по умолчанию таббара selectionIndicatorImage составляет 49, но в iPhone X установить высоту изображения равна 48.


(SWIFT или Objective-C)

enter image description here

  1. Добавить новый UIView
  2. добавить ограничения

enter image description here

  1. просто поместите свой UITabBar внутри UIView
  2. добавить ограничения

enter image description here

результат:

enter image description here

Я надеюсь, это может помочь кому-то.