Область касания кнопок UIB изменяется, когда отображается строка состояния вызова.

ОБНОВЛЕНИЕ 2

Мои подозрительные были верны. Проблема была в анимации, потому что я не принял во внимание происхождение оси Y, которое отличалось, когда была видна строка состояния во время вызова. Я добавлю ответ с соответствующим кодом.

ОБНОВЛЕНИЕ 1

У меня была мысль, что анимация меню вызывает проблему. Когда я нажимаю на меню, он запускает анимацию, чтобы открыть меню. Анимация перемещает представленный VC вправо, немного сужает его и поворачивает по оси z, чтобы он выглядел плавно и плавно. Я буду исследовать в этом направлении и уточню, найду ли я что-нибудь.

ОРИГИНАЛЬНАЯ ПОЧТА

Я заметил некоторые проблемы с пользовательским интерфейсом, когда в моем приложении видна строка состояния In-Call.

У меня есть пользовательский вид, который действует как моя панель навигации и содержит небольшую кнопку, чтобы вернуться в меню. (Я назову это menuBtn). Под этой пользовательской панелью навигации у меня есть табличное представление, содержащее tableViewHeader с 2 кнопками для навигации между днями в таблице. (Я назову эти кнопки: prevBten а также nextBtn). Я буду использовать эти 3 представления в качестве примера, но проблема накапливается повсюду...

Обычно все работает отлично и как положено. Даже когда строка состояния In-Call становится видимой, изменение размера работает отлично, а жизнь прекрасна. Проблема начинается, когда я нажимаю menuBtn так что текущий вид выдвигается, чтобы открыть главное меню (при этом я переключаюсь между Storyboards). Теперь, когда я возвращаюсь к исходному экрану, все виды выглядят нормально (по размеру), но область нажатия теперь не соответствует изображению кнопок: я вижу кнопку там, где она должна быть, но когда я Нажмите, ничего не происходит. Странная часть заключается в том, что я могу нажать под кнопки, и это приведет к привязке действия к этим кнопкам.

Чтобы сделать это еще более странным - когда проблема возникает, я вижу, что иногда область нажатия определенной кнопки (т.е. menuBtn) перекрывает кнопку дифференциета (prevBtn).

Некоторое время искали причину / решения. Я прочитал следующие посты без удачи:

  1. ClipToBounds родительский вид.
  2. Поиграть сAutoResizingMasks

Я понял, что это как-то связано с тем, что я переключаюсь между Storyboards - хотя попытка установить авторазмер в конструкторе интерфейса не сработала.

Некоторый код, который может помочь любому, кто захочет помочь

Метод, который срабатывает, когда menuBtn нажата:

- (void)replaceChildStoryboard:(NSString *)storyboardName
{
//remove previos child's view and itself from parent
[currNav removeFromParentViewController];
[currNav.view removeFromSuperview];

//instantiate new storyboard
UIStoryboard *storyboard = [UIStoryboard storyboardWithName:storyboardName bundle:nil];
UINavigationController *vc = [storyboard instantiateInitialViewController];

//update curr pointer to new child and add it to parent
currNav = vc;
[self addChildViewController:currNav];
[self.view addSubview:currNav.view];
[currNav didMoveToParentViewController:self];

//animate transition
[self slideNavAnimated:NO];
[self navPressed];

}

Некоторые скриншоты

На третьем скриншоте, когда я нажимаю prevBtn (тот, что под menuBtn) Я получаю menuBtn действие активируется вместо. (как показано в кругах, которые я рисую - поэтому нажатие внутри красного круга должно активировать prevBtn но вызывает menuBtn, нажатие на черный круг ничего не должно делать, но вызывает prevBtn)

Нормальное состояниеСтрока состояния In-Call открытанеправильно коснитесь области

Надеюсь, что кто-то может помочь мне найти причину проблемы и исправить ее.

Заранее спасибо.

1 ответ

Решение

Как упоминалось во 2-м обновлении моего вопроса, проблема, похоже, заключается в анимации меню. Первоначально я не принимал во внимание тот факт, что происхождение представления по оси Y отличается, зависит от состояния строки состояния в вызове (видимый \ невидимый).

Добавив начало оси Y к расчету анимации, я исправил проблему. Итак, каждый звонок, который выглядел так:

 //adding the animations
      [currNav.view.layer addAnimation:[NRAnimationFactory positionAnimationFrom:CGPointMake(centerOriginX, self.view.frameHeight/2)
                                                                              To:CGPointMake(self.view.frameWidth, self.view.frameHeight/2)
                                                                        Duration:duration]
                                forKey:@"moving"];   

Я превращаю это в

 //adding the animations :
      [currNav.view.layer addAnimation:[NRAnimationFactory positionAnimationFrom:CGPointMake(centerOriginX, self.view.originY + self.view.frameHeight/2)
                                                                              To:CGPointMake(self.view.frameWidth, self.view.originY + self.view.frameHeight/2)
                                                                        Duration:duration]
                                forKey:@"moving"];   

Обратите внимание на дополнительные self.view.originY который равен 0, когда строка состояния в вызове невидима, и 20 в противном случае.

Надеюсь, это кому-нибудь поможет. Я потратил несколько дней на это!

Другие вопросы по тегам