Я почухав голову через цю проблему. Здається, це пов'язано з тим, як ініціалізується та додається tabBar для перегляду ієрархії. Я також спробував вище рішення, такі як виклик invalidateIntrinsicContentSize
, встановлення кадру, а також bottomInsets
всередині підкласу UITabBar. Вони, здається, працюють тимчасово, і вони порушують якийсь інший сценарій або регресують панель вкладок, викликаючи деяку неоднозначну проблему з компонуванням. Коли я налагоджував проблему, я спробував призначити обмеження висоти UITabBar та centerYAnchor, однак це не вирішило проблеми. Я зрозумів, за допомогою налагоджувача, що висота табулятора була правильною до та після відтворення проблеми, що змусило мене думати, що проблема в підзаглядах. Я використовував наведений нижче код, щоб успішно усунути цю проблему, не регресуючи жодного іншого сценарію.
- (void) viewWillTransitionToSize:(CGSize)size withTransitionCoordinator:(id<UIViewControllerTransitionCoordinator>)coordinator
{
[super viewWillTransitionToSize:size withTransitionCoordinator:coordinator];
if (DEVICE_IS_IPHONEX())
{
[coordinator animateAlongsideTransition:^(id<UIViewControllerTransitionCoordinatorContext> _Nonnull context) {
for (UIView *view in self.tabBar.subviews)
{
if ([NSStringFromClass(view.class) containsString:@"UITabBarButton"])
{
if (@available (iOS 11, *))
{
[view.bottomAnchor constraintEqualToAnchor:view.superview.safeAreaLayoutGuide.bottomAnchor].active = YES;
}
}
}
} completion:^(id<UIViewControllerTransitionCoordinatorContext> _Nonnull context) {
[self.tabBar layoutSubviews];
}];
}
}
Припущення: я роблю це лише для iPhone X, оскільки він, схоже, не відтворюється на будь-якому іншому пристрої. Базується на припущенні, що Apple не змінює назву класу UITabBarButton у майбутніх випусках iOS. Ми робимо це на UITabBarButton лише тоді, коли означає, що Apple додає більше внутрішніх підвидів у UITabBar, можливо, нам буде потрібно змінити код, щоб підкоригувати це.
Будь ласка, знайте, якщо це працює, буде відкрито для пропозицій та вдосконалень!
Слід створити швидкий еквівалент для цього просто.