Кто-нибудь имеет проблемы с симулятором iPhone X вокруг компонента UITabBar?
Похоже, у меня рендеринг иконок и заголовка друг над другом, я не уверен, что что-то упустил, я также запустил его в симуляторе iPhone 8 и на одном из реальных устройств, где он выглядит нормально, как показано на раскадровка
iPhone X:
iPhone 8
Ответы:
Я смог обойти эту проблему, просто вызвав invalidateIntrinsicContentSize для UITabBar в viewDidLayoutSubviews.
Примечание. Нижняя часть панели вкладок должна содержаться в нижней части основного вида, а не в безопасной области, и панель вкладок не должна иметь ограничений по высоте.
источник
[self.view layoutIfNeeded]
.landscapeImage
свойства кнопки панели вкладок. Рекомендуемые размеры указаны в [Apple HIG's] ( developer.apple.com/design/human-interface-guidelines/ios/… ) в разделе « Размер пользовательских значков»Ответ, предоставленный VoidLess, устраняет проблемы TabBar лишь частично. Он устраняет проблемы с макетом внутри панели вкладок, но если вы используете viewcontroller, который скрывает панель вкладок, панель вкладок отображается неправильно во время анимации (для воспроизведения лучше всего иметь 2 сегмента - один модальный и один толчок. Если вы чередуете сегменты, вы можете увидеть панель вкладок, оказываемых не на своем месте). Код ниже устраняет обе проблемы. Хорошая работа, яблоко.
Код Objective-C:
источник
Есть хитрость, с помощью которой мы можем решить проблему.
Это действительно работает для меня.
Или вы можете перейти по этой ссылке для более подробной информации.
источник
переопределить
UITabBar
sizeThatFits(_)
для safeAreaисточник
Я добавил это к
viewWillAppear
своему обычаюUITabBarController
, потому что ни один из предоставленных ответов не работал для меня:источник
У меня такая же проблема.
Если я установлю любую ненулевую константу в нижнем ограничении UITabBar в безопасную область:
Он начинает работать как положено ...
Это единственное изменение, которое я сделал, и я понятия не имею, почему это работает, но если бы кто-то сделал, я бы хотел знать.
источник
Перемещение панели вкладок на 1 пункт от дна сработало для меня.
Конечно, при этом вы получите пробел, который вам придется каким-то образом заполнить, но текст / значки теперь правильно расположены.
источник
Ага! Это на самом деле волшебство!
Я наконец понял это после нескольких часов ругательства Apple.
UIKit на самом деле обрабатывает это для вас, и кажется, что смещенные элементы панели вкладок происходят из-за неправильной настройки (и, возможно, фактической ошибки UIKit). Нет необходимости в создании подклассов или в фоновом режиме.
UITabBar будет «просто работать», если он ограничен дном суперпредставления, а НЕ нижней безопасной зоной .
Это даже работает в Интерфейсном конструкторе.
Правильная настройка
Иногда это все еще не работает
Что действительно глупо, так это то, что вы можете увидеть ошибку и в IB, даже если вы добавите точные ограничения, которые IB добавляет в описанных выше шагах!
источник
Исправлено использование подкласса UITabBar для применения safeAreaInsets:
источник
Решил для меня по телефону
[tabController.view setNeedsLayout];
после увольнения модал в блоке завершения.источник
UITabBar увеличивается по высоте, чтобы быть над кнопкой / линией home, но рисует подпредставление в его исходном местоположении и накладывает UITabBarItem поверх подпредставления.
В качестве обходного пути вы можете обнаружить iPhone X, а затем уменьшить высоту просмотра на 32 пикселя, чтобы обеспечить отображение панели вкладок в безопасной области над домашней линией.
Например, если вы создаете ваш TabBar программно заменить
С этим:
ПРИМЕЧАНИЕ. Это может быть ошибкой, поскольку размеры представления и расположение панели вкладок устанавливаются ОС. Вероятно, он должен отображаться согласно скриншоту Apple в Руководстве по интерфейсу пользователя iPhone X здесь: https://developer.apple.com/ios/human-interface-guidelines/overview/iphone-x/
источник
В моем случае я установил пользовательскую высоту UITabBar в своем UITabBarController, например так:
Удаление этого кода было решением для правильного отображения TabBar на iPhone X.
источник
Самым простым решением, которое я нашел, было просто добавить пространство 0,2 пт между нижней частью панели вкладок и нижней частью safeAreaLayoutGuide.bottomAnchor, как показано ниже.
источник
У меня возникла та же проблема, когда я пытался установить фрейм UITabBar в моем пользовательском TabBarController.
Когда я просто настроил его на новый размер, проблема исчезла
источник
kPhoneXTabBarHeight
?Я столкнулся с этим сегодня, когда UITabBar вручную добавлялся в контроллер представления в раскадровке, при выравнивании по нижней части безопасной области с константой 0 я мог бы получить проблему, но изменение ее на 1 решило бы проблему. Поднятие UITabBar на 1 пиксель больше, чем обычно, было приемлемо для моего приложения.
источник
Я почесал голову над этой проблемой. Похоже, это связано с тем, как tabBar инициализируется и добавляется для просмотра иерархии. Я также попробовал вышеуказанные решения, такие как вызов
invalidateIntrinsicContentSize
, установка фрейма, а такжеbottomInsets
внутри подкласса UITabBar. Тем не менее, они работают временно и нарушают какой-то другой сценарий или регрессируют на панель вкладок, вызывая неоднозначную проблему с макетом. Когда я отлаживал проблему, я пытался назначить ограничения по высоте для UITabBar и centerYAnchor, однако ни одна из них не устранила проблему. В отладчике я понял, что высота tabBar была правильной до и после воспроизведения проблемы, что привело меня к мысли, что проблема была в подпредставлениях. Я использовал приведенный ниже код, чтобы успешно решить эту проблему без регресса в любой другой сценарий.Предположения: я делаю это только для iPhone X, поскольку в данный момент он не воспроизводится ни на одном другом устройстве. Основан на предположении, что Apple не изменит название класса UITabBarButton в будущих выпусках iOS. Мы делаем это на UITabBarButton только тогда, когда означает, что если Apple добавляет больше внутренних подпредставлений в UITabBar, нам может потребоваться изменить код, чтобы приспособиться к этому.
Пожалуйста, дайте мне знать, если это работает, будут открыты для предложений и улучшений!
Для этого должно быть просто создать быстрый эквивалент.
источник
viewDidAppear(animated:)
мой,UITabBarController
и он работал нормально. Спасибо!Из этого урока:
https://github.com/eggswift/ESTabBarController
и после инициализации панели вкладок пишем эту строку в классе appdelegate
Решает мою проблему с панелью вкладок.
Надеюсь, это решит вашу проблему
Спасибо
источник
Выберите вкладку и установите флажок «Сохранить относительные поля» в редакторе инспекторов следующим образом:
источник
У меня была похожая проблема, сначала она отображалась корректно, но после настройки
badgeValue
на одном из tabBarItem она сломала макет. То, что это работало для меня без подкласса,UITabBar
было этим, на моем уже созданномUITabBarController
подклассе.Я использовал superview tabBar, чтобы убедиться, что ограничения / якоря находятся в одной иерархии представлений, и избежать сбоев.
Исходя из моего понимания, поскольку это, похоже, ошибка UIKit, нам просто нужно переписать / переустановить ограничения панели вкладок, чтобы механизм автоматического размещения снова мог правильно расположить панель вкладок.
источник
Если у вас есть ограничения по высоте для панели вкладок, попробуйте удалить ее.
Столкнулся с той же проблемой, и устранение этого решило проблему.
источник
Я создал новый UITabBarController в своей раскадровке и поместил все контроллеры представления в этот новый UITabBarConttoller. Итак, все хорошо работает в симуляторе iPhone X.
источник
Для iPhone вы можете сделать это, подкласс UITabBarController.
Перейдите в раскадровку и разрешите использовать Руководство по макету безопасной области и измените класс UITabbarController на MyTabBarController
PS Это решение не тестировалось в случае универсального применения и iPad.
источник
попробуйте изменить заставку с размером @ 3x (3726 × 6624)
источник
Для меня убери
[self.tabBar setBackgroundImage:]
работу, может быть это баг UIKitисточник
Для меня это исправило все проблемы:
источник
Я использовал
UITabBarController
в раскадровке, и сначала она работала нормально для меня, но после обновления до новой версии XCode она стала вызывать у меня проблемы, связанные с высотой tabBar.Для меня исправление состояло в том, чтобы удалить существующее
UITabBarController
из раскадровки и заново создать, перетащив его из библиотеки объектов конструктора интерфейса .источник
Для тех, кто пишет целиком
UITabBarController
программно, вы можете использоватьUITabBarItem.appearance().titlePositionAdjustment
для регулировки позиции заголовкаТак что в этом случае, если вы хотите добавить разрыв между Icon и Title, используйте его в
viewDidLoad
:обнаружение, если устройство имеет экран Notch:
источник
У меня была та же проблема, которая была решена путем установки элементов tabBar после того, как панель вкладок была выложена.
В моем случае проблема произошла, когда:
источник
Я думаю, что это ошибка UIKit от iPhoneX. потому что это работает:
источник
Я полагаю, что вы можете расположить панель вкладок напротив нижнего руководства по безопасной компоновке. Вероятно, это не то, что вам нужно, поскольку панель вкладок, похоже, выполняет свои собственные расчеты, чтобы безопасно расположить элементы панели вкладок в верхней части домашней строки в iPhone X. Установите нижнее ограничение к низу суперпредставления . Вы должны увидеть, что он правильно отображается на iPhone X и других iPhone.
источник