So verbergen Sie die Schaltfläche der benutzerdefinierten Registerkartenleiste, wenn hidesBottomBarWhenPushed auf "TRUE" gesetzt ist

Ich verwende das Code-Snippet von Tito, um meiner Tab-Leiste eine benutzerdefinierte Schaltfläche hinzuzufügen:https://github.com/tciuro/CustomTabBar

(Unterklassen von UITabbarController und Hinzufügen einer benutzerdefinierten Schaltfläche mit

// .. created a UIButton *button
[self.view addSubview:button];

)

Dies funktioniert hervorragend mit meiner Storyboard-basierten App, mit Ausnahme einer Unteransicht innerhalb eines Navigationscontrollers mit aktivierter Option "Untere Leiste beim Drücken ausblenden". Dadurch wird die Registerkartenleiste wie versprochen ausgeblendet, nicht jedoch die benutzerdefinierte Schaltfläche. Scheint, als sollte die Schaltfläche als Unteransicht zur Registerkartenleiste selbst hinzugefügt werden? Ich habe diesen hässlichen Code ausprobiert, der nicht einmal den Button erscheinen ließ:

for(UIView *view in self.view.subviews)
{
    if([view isKindOfClass:[UITabBar class]])
    {
        [view addSubview:button];
        break;
    }
}

Irgendwelche Ideen?

AKTUALISIEREN: Meine Lösung: In meinem ApplicationDelegate definiere ich die folgenden Methoden, die ich bei Bedarf in den Methoden viewWillAppear oder viewWillDisappear aufrufe:

-(void)hideCenterButton:(BOOL)animated
{
    if(animated){

    [UIView animateWithDuration:0.3
                          delay:0.0f
                        options:UIViewAnimationCurveLinear
                     animations:^{
                         CGRect frame = self.centerButton.frame;
                         frame.origin.x = -100;
                         self.centerButton.frame = frame;
                     }
                     completion:^(BOOL finished){
                     }];
    }
}

-(void)showCenterButton:(BOOL)animated
{
    if(animated){

    [UIView animateWithDuration:0.35
                          delay:0.0f
                        options:UIViewAnimationCurveLinear
                     animations:^{
                         CGRect frame = self.centerButton.frame;
                         frame.origin.x = (self.view.superview.frame.size.width / 2) - (self.centerButton.frame.size.width / 2);
                         self.centerButton.frame = frame;
                     }
                     completion:^(BOOL finished){
                     }];
    }
}

Ich musste die Dauer der Animation auf 0,35 s einstellen, um einen reibungslosen Effekt im Einklang mit der Registerkartenleiste zu erzielen.

Antworten auf die Frage(4)

Ihre Antwort auf die Frage