Как я могу вывести UIView из-под UINavigationBar?

В настоящее время я показываю UIView, который скользит вниз от верхней части моего окна до позиции:

-(void)showNotificationBar
{
    [notificationBar setFrame: CGRectMake(0, 0, 320, 44)];
    [[[UIApplication sharedApplication] keyWindow] addSubview:notificationBar];

    [UIView animateWithDuration:0.5
                          delay:0.0
                        options: UIViewAnimationCurveEaseInOut
                     animations:^{
                         [notificationBar setFrame: CGRectMake(0, 59, 320, 32)];
                     } 
                     completion:^(BOOL finished){
                         NSLog(@"Done!");
                     }];
}

Я хочу, чтобы это выскользнуло из-под моей UINavigationBar. Сейчас он перемещается из верхней части окна в нижнюю часть панели навигации. Я хочу, чтобы он скользил снизу панели навигации, чтобы отобразить себя. Теперь точно знаете, как это сделать?


person Sheehan Alam    schedule 23.11.2011    source источник
comment
В чем именно заключается ваша проблема?   -  person eric.mitchell    schedule 23.11.2011
comment
изменится ли когда-нибудь заголовок вашей панели навигации? Я просто пытаюсь придумать идеи, чтобы это сделать   -  person Louie    schedule 23.11.2011


Ответы (2)


Вы добавляете notificationBar поверх всех других представлений в вашем окне. Вам нужно добавить его в качестве подпредставления супервизора панели навигации под панелью навигации.

Допустим, ваш UINavigationBar находится в собственности self.navBar. Попробуй это:

- (void)showNotificationBar
{
    CGRect frame = CGRectMake(0, 0, 320, 44);
    frame.origin.y = CGRectGetMaxY(self.navBar.frame) - frame.size.height;
    notificationBar.frame = frame;

    [self.navBar.superview insertSubview:notificationBar belowSubview:self.navBar];

    [UIView animateWithDuration:0.5 animations:^{
        CGRect frame = notificationBar.frame;
        frame.origin.y = CGRectGetMaxY(self.navBar.frame);
        notificationBar.frame = frame;
    }];
}
person rob mayoff    schedule 23.11.2011
comment
На полупрозрачной навигационной панели некорректно работает. - person Rui Lopes; 12.01.2015
comment
Однако это хорошо работает при использовании UISearchDisplayController navigationBar.superview равно нулю. Есть идеи, почему это происходит? - person KaosXIV; 20.08.2015

Быстрый взгляд на это, и похоже, что вы хотите исследовать, как «замаскировать» слой. Взгляните на этот пост.

Маскирует анимацию? SDK для iPhone

Если бы вы замаскировали раскрывающееся меню под видом (скрытым видом), вы могли бы показать анимацию, не создавая впечатление, будто она идет сверху панели навигации, но под ней.

person Louie    schedule 23.11.2011