Я использую анимацию на основе UIImageView для отображения пользовательского индикатора активности. За установку этого отвечает следующий код:
+ (void)startLoadingActivity:(UIViewController *)vc {
vc.parentViewController.navigationItem.titleView = [UIImageView imageViewWithPath:@"loading_" count:10 duration:1.3 frame:CGRectMake(0, 0, 22, 22)];
}
Вот суть категории UIImageView+Animation.
Всякий раз, когда я запускаю веб-запрос, я запускаю индикатор активности, и всякий раз, когда запрос выполняется, я останавливаю его, устанавливая для свойства titleView
значение nil
.
Результат такой:
Метод запроса также вызывается в методе -viewDidAppear:
контроллера представления.
Однако всякий раз, когда анимация начинается во время перехода, кажется, что положение UIImageView
неправильное.
Следующий результат показывает проблему:
Обратите внимание, как отображается индикатор активности над кнопкой «Группы».
Откуда эта проблема? Как я могу это решить?
2 ответа
Я думаю, проблема в том, что, хотя вы устанавливаете для titleView значение nil, вы не удаляете загрузчик из представления, поэтому его кадр переходит в позицию (0,0).
Попробуйте следующее:
+ (void)startLoadingActivity:(UIViewController *)vc {
UIImageView *imageView = [UIImageView imageViewWithPath:@"loading_" count:10 duration:1.3 frame:CGRectMake(0, 0, 22, 22)];
imageView.tag = 999;
vc.parentViewController.navigationItem.titleView = imageView;
}
И всякий раз, устанавливая
titleView = nil
Также делаю
[[self.navigationController.view viewWithTag:999] removeFromSuperView];
Этот вопрос действительно хорошая демонстрация проблемы, и ответы здесь: Заголовок Stackoverflow перемещается при нажатии/ всплывающее окно контроллера просмотра
Короче говоря:
- Используйте UIView с
.autoresizingMask = UIViewAutoresizingFlexibleTopMargin
- Не делайте этого в "viewWillAppear:" (сделайте в viewDidLoad/update в DidAppear или более поздней версии)
Похожие вопросы
Связанные вопросы
Новые вопросы
ios
iOS - мобильная операционная система, работающая на Apple iPhone, iPod touch и iPad. Используйте этот тег [ios] для вопросов, связанных с программированием на платформе iOS. Используйте связанные теги [target-c] и [swift] для проблем, характерных для этих языков программирования.