Проблема с анимацией при скрытии панели инструментов iPhone - PullRequest
0 голосов
/ 17 февраля 2010

У меня есть панель инструментов в моем RootViewController, и я затем скрываю панель инструментов в SubViewController, используя следующий код:

RootViewController

- (void)viewDidLoad {
    ...
    [self.navigationController setToolbarHidden:FALSE animated:FALSE];
    ...
}

- (void)viewDidAppear:(BOOL)animated {
    [self.navigationController setToolbarHidden:FALSE animated:TRUE];
    [super viewDidAppear:animated];
}

SubViewController

- (void)viewDidLoad {
    ...
[self.navigationController setToolbarHidden:YES animated:YES];
    [super viewDidLoad];
}

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

Однако при переходе от RootViewController к SubViewController появляется неприятная проблема с анимацией. Поскольку панель инструментов скрыта, там, где была панель инструментов, появится белая полоса, а затем быстро исчезнет по экрану справа налево.

Надеюсь, я объяснил это достаточно хорошо, чтобы вы поняли.

Есть идеи, как это исправить?

Ответы [ 5 ]

1 голос
/ 21 октября 2011

ПОПРОБУЙТЕ

- (IBAction)hideTheToolBar:(id)sender{
    //[toolBar setHidden:YES];
    if (toolBar.hidden == NO)
    {
        [UIView animateWithDuration:0.25 delay:0.0
                            options:UIViewAnimationOptionCurveLinear | UIViewAnimationOptionAllowUserInteraction
                         animations:^(void)
         {
             toolBar.alpha = 0.0f;
         }
                         completion:^(BOOL finished)
         {
             toolBar.hidden = YES;
         }
         ];
    }
}
1 голос
/ 05 апреля 2010

Я видел эту проблему пару раз, и обнаружил, что при вызове setToolbarHidden:animated: в методе viewWillAppear: не всегда получается плавная анимация без артефактов белого прямоугольника.

Что всегда работает, так это помещает вызов setToolbarHidden:animated: в метод viewDidAppear:. Это означает, что анимация, скрывающая панель инструментов, запускается после того, как навигационный контроллер завершил загрузку нового представления в стек, поэтому белые прямоугольники отсутствуют. Однако это также означает, что вся анимация состоит из двух этапов: первый анимирует вид, второй скрывает панель инструментов, поэтому у вас появляется вид «скрытой» панели инструментов. Я признаю, что это не всегда то, что вы хотите.

1 голос
/ 17 февраля 2010

Вы пробовали делать анимацию методом SubViewController -viewWillAppear:? Тебе, возможно, повезет больше.

0 голосов
/ 31 мая 2013

Я нашел очень полезным установить свойство hidesBottomBarWhenPushed в инициализации вашего контроллера представления.

Например:

- (id)init
{
    self = [super initWithStyle:UITableViewStyleGrouped];
    if (self) {
        // Custom initialization
        self.navigationItem.rightBarButtonItem = self.editButtonItem;
        self.hidesBottomBarWhenPushed = YES;
    }
    return self;
}

Он скрывает те паразитные панели инструментов, которые появляются в переходах push и pop. Кроме того, это освобождает вас от ручного скрытия панели инструментов в методе ViewWillAppear или аналогичных подходах.

0 голосов
/ 18 февраля 2010

Вы можете (вероятно, должны) сделать это в назначенном инициализаторе контроллера, например, initWithNibName:bundle:

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...