Frage iOS Safe Area Layout Guides für benutzerdefinierte TabBar


Ich habe eine App basierend auf benutzerdefinierten TabBar controller Und jetzt, da wir ein sicheres Bereichslayout haben, möchte ich meine App ändern, um den iPhone X-Bildschirm voll auszunutzen.

Also möchte ich das Problem der TabBar beheben, die derzeit keinen sicheren Bereich berücksichtigt.

Ich habe die meisten dieser Lösungen durchgesehen, die Leute posten, aber die sind meistens für UIViewController.

Meine aktuelle tabBar sieht so aus

Tab bar screenshot showing overlapping iPhone X bottom swipe indicator

ich benutze RDVTabBar dafür und diese Tab-Leiste ist eine Instanz von UIView und ich verwende kein Storyboard oder Xib, alles wird programmgesteuert ausgeführt.

Aktueller Code zur Behebung des Problems

if (@available(iOS 11.0, *)) {
    UILayoutGuide *safe = self.view.safeAreaLayoutGuide;
    self.tabBar.translatesAutoresizingMaskIntoConstraints = NO;

    [NSLayoutConstraint activateConstraints:@[[safe.trailingAnchor constraintEqualToAnchor:self.tabBar.trailingAnchor],
                                              [self.tabBar.leadingAnchor constraintEqualToAnchor:safe.leadingAnchor],
                                              [safe.bottomAnchor constraintEqualToAnchor:self.tabBar.bottomAnchor]]];

    [self.tabBar addConstraint:[NSLayoutConstraint constraintWithItem:self.tabBar
                                                      attribute:NSLayoutAttributeHeight
                                                      relatedBy:NSLayoutRelationEqual
                                                         toItem:nil
                                                      attribute: NSLayoutAttributeNotAnAttribute
                                                     multiplier:1
                                                       constant:45]];

}

Aber dadurch ändert sich nichts

Ich habe einen Workaround in Anbetracht meiner aktuellen Code-Struktur und das funktioniert

CGRect frame = self.tabBar.frame;
frame.origin.y = frame.origin.y - 34;
frame.size.height = frame.size.height + 34;
self.tabBar.frame = frame;

Aber wenn keine Sicherheitsbereich-Layout-Guides verwendet werden und wenn sich zukünftige Sicherheitsbereichshöhen ändern, wird dies nicht funktionieren. also bin ich nicht bereit, das zu benutzen.

Also, wie kann ich dieses Problem mit Safe Area Layout Guide nur für diese TabBar beheben?


5
2017-11-13 07:40


Ursprung


Antworten: