Ich habe mir über dieses Problem den Kopf gekratzt. Es scheint damit verbunden zu sein, wie die tabBar initialisiert und zur Ansichtshierarchie hinzugefügt wird. Ich habe auch die oben genannten Lösungen wie Aufrufen invalidateIntrinsicContentSize
, Festlegen des Frames und auch bottomInsets
innerhalb einer UITabBar-Unterklasse ausprobiert. Sie scheinen jedoch vorübergehend zu funktionieren und brechen ein anderes Szenario ab oder regressieren die Registerkartenleiste, indem sie ein mehrdeutiges Layoutproblem verursachen. Als ich das Problem debuggte, habe ich versucht, die Höhenbeschränkungen der UITabBar und centerYAnchor zuzuweisen, aber beide haben das Problem nicht behoben. Im View-Debugger wurde mir klar, dass die TabBar-Höhe vor und nach der Reproduktion des Problems korrekt war, was mich zu der Annahme veranlasste, dass das Problem in den Unteransichten lag. Ich habe den folgenden Code verwendet, um dieses Problem erfolgreich zu beheben, ohne ein anderes Szenario zu regressieren.
- (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];
}];
}
}
Annahmen: Ich mache dies nur für das iPhone X, da es derzeit auf keinem anderen Gerät reproduziert zu werden scheint. Basiert auf der Annahme, dass Apple den Namen der UITabBarButton-Klasse in zukünftigen iOS-Versionen nicht ändert. Wir tun dies nur auf UITabBarButton, wenn Apple mehr interne Unteransichten zu UITabBar hinzufügt, müssen wir möglicherweise den Code ändern, um dies anzupassen.
Bitte lassen Sie mich wissen, ob dies funktioniert, offen für Vorschläge und Verbesserungen!
Es sollte einfach sein, dafür ein schnelles Äquivalent zu erstellen.