Как исправить проблему высоты панели вкладок на iPhone X
12 ответов
"инспектор файлов" справа от раскадровки 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 с супервизором, а не с безопасной областью. Если вы выровняете его по безопасной области, это будет так:
и при выравнивании по супервизору он будет отображаться правильно:
Я думаю, это потому, что Apple дала элементам панели вкладок поле по умолчанию внизу, если оно находится на iPhone X, поскольку они хотят, чтобы панель вкладок была расширена до нижней части экрана, чтобы избегайте плавающего бара.
invalidateIntrinsicContentSize UITabBar в viewWillLayoutSubviews, которые могут вам помочь.
override func viewWillLayoutSubviews() {
super.viewWillLayoutSubviews()
self.tabBar.invalidateIntrinsicContentSize()
}
В Ограничениях -
Если вы даете нижнее пространство с "Нижним руководством по компоновке", то эта проблема возникнет.
устранение:
дайте нижнее пространство по отношению к superview. Это будет работать на 100% идеально.
У меня была похожая проблема. Я устанавливал selectionIndicatorImage в viewDidLoad (). Перемещение кода в viewDidLayoutSubviews () исправило мою проблему.
следуйте инструкциям ниже для установки uitabbar selectionIndicatorImage.
- UITabBar.внешний вид.)(selectionIndicatorImage = #YOUR_IMAGE
- убедитесь, что высота изображения 48.
высота по умолчанию таббара selectionIndicatorImage составляет 49, но в iPhone X установить высоту изображения равна 48.
(SWIFT или Objective-C)
- Добавить новый UIView
- добавить ограничения
- просто поместите свой UITabBar внутри UIView
- добавить ограничения
результат:
Я надеюсь, это может помочь кому-то.