Podrapałem się w głowę z powodu tego problemu. Wydaje się, że jest to związane ze sposobem inicjowania i dodawania tabBar w celu wyświetlenia hierarchii. Wypróbowałem również powyższe rozwiązania, takie jak wywołanie invalidateIntrinsicContentSize
, ustawienie ramki, a także bottomInsets
wewnątrz podklasy UITabBar. Wydaje się jednak, że działają one tymczasowo i przerywają jakiś inny scenariusz lub cofają pasek kart, powodując niejednoznaczny problem z układem. Podczas debugowania problemu próbowałem przypisać ograniczenia wysokości do UITabBar i centerYAnchor, jednak żadne z nich nie rozwiązało problemu. W debugerze zdałem sobie sprawę, że wysokość tabBar była poprawna przed i po odtworzeniu problemu, co doprowadziło mnie do wniosku, że problem występuje w podwidokach. Użyłem poniższego kodu, aby pomyślnie rozwiązać ten problem bez cofania żadnego innego scenariusza.
- (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];
}];
}
}
Założenia: robię to tylko dla iPhone'a X, ponieważ w tej chwili nie wydaje się, aby odtwarzał się na żadnym innym urządzeniu. Opiera się na założeniu, że Apple nie zmienia nazwy klasy UITabBarButton w przyszłych wydaniach iOS. Robimy to na UITabBarButton tylko wtedy, gdy oznacza to, że jeśli Apple doda więcej wewnętrznych podglądów do UITabBar, może być konieczne zmodyfikowanie kodu, aby dostosować się do tego.
Daj mi znać, czy to zadziała, będzie otwarty na sugestie i ulepszenia!
Stworzenie szybkiego odpowiednika powinno być proste.