Я использую анимацию на основе 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.

Результат такой:

OK

Метод запроса также вызывается в методе -viewDidAppear: контроллера представления.

Однако всякий раз, когда анимация начинается во время перехода, кажется, что положение UIImageView неправильное.

Следующий результат показывает проблему:

Обратите внимание, как отображается индикатор активности над кнопкой «Группы».

KO

Откуда эта проблема? Как я могу это решить?

6
thegameg 12 Апр 2015 в 21:52

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];
0
Asaf 12 Апр 2015 в 23:24
Я пробовал, вроде не то. Проблема возникает при добавлении загрузчика.
 – 
thegameg
12 Апр 2015 в 22:59
Я отредактировал свой ответ, чтобы удалить его для просмотра с навигационного контроллера. Это помогает?
 – 
Asaf
12 Апр 2015 в 23:24
Нет, это ничего не изменило. Спасибо, в любом случае.
 – 
thegameg
13 Апр 2015 в 01:28

Этот вопрос действительно хорошая демонстрация проблемы, и ответы здесь: Заголовок Stackoverflow перемещается при нажатии/ всплывающее окно контроллера просмотра

Короче говоря:

  1. Используйте UIView с .autoresizingMask = UIViewAutoresizingFlexibleTopMargin
  2. Не делайте этого в "viewWillAppear:" (сделайте в viewDidLoad/update в DidAppear или более поздней версии)
0
Oleg Shanyuk 7 Авг 2017 в 14:09