Область касания кнопок UIB изменяется, когда отображается строка состояния вызова.
ОБНОВЛЕНИЕ 2
Мои подозрительные были верны. Проблема была в анимации, потому что я не принял во внимание происхождение оси Y, которое отличалось, когда была видна строка состояния во время вызова. Я добавлю ответ с соответствующим кодом.
ОБНОВЛЕНИЕ 1
У меня была мысль, что анимация меню вызывает проблему. Когда я нажимаю на меню, он запускает анимацию, чтобы открыть меню. Анимация перемещает представленный VC вправо, немного сужает его и поворачивает по оси z, чтобы он выглядел плавно и плавно. Я буду исследовать в этом направлении и уточню, найду ли я что-нибудь.
ОРИГИНАЛЬНАЯ ПОЧТА
Я заметил некоторые проблемы с пользовательским интерфейсом, когда в моем приложении видна строка состояния In-Call.
У меня есть пользовательский вид, который действует как моя панель навигации и содержит небольшую кнопку, чтобы вернуться в меню. (Я назову это menuBtn
). Под этой пользовательской панелью навигации у меня есть табличное представление, содержащее tableViewHeader
с 2 кнопками для навигации между днями в таблице. (Я назову эти кнопки: prevBten
а также nextBtn
). Я буду использовать эти 3 представления в качестве примера, но проблема накапливается повсюду...
Обычно все работает отлично и как положено. Даже когда строка состояния In-Call становится видимой, изменение размера работает отлично, а жизнь прекрасна. Проблема начинается, когда я нажимаю menuBtn
так что текущий вид выдвигается, чтобы открыть главное меню (при этом я переключаюсь между Storyboards
). Теперь, когда я возвращаюсь к исходному экрану, все виды выглядят нормально (по размеру), но область нажатия теперь не соответствует изображению кнопок: я вижу кнопку там, где она должна быть, но когда я Нажмите, ничего не происходит. Странная часть заключается в том, что я могу нажать под кнопки, и это приведет к привязке действия к этим кнопкам.
Чтобы сделать это еще более странным - когда проблема возникает, я вижу, что иногда область нажатия определенной кнопки (т.е. menuBtn
) перекрывает кнопку дифференциета (prevBtn
).
Некоторое время искали причину / решения. Я прочитал следующие посты без удачи:
ClipToBounds
родительский вид.- Поиграть с
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
)
Надеюсь, что кто-то может помочь мне найти причину проблемы и исправить ее.
Заранее спасибо.
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 в противном случае.
Надеюсь, это кому-нибудь поможет. Я потратил несколько дней на это!