В это пример.
Я анимирую кадр PhotoViewerViewController, когда я анимирую tabBarController (для полноэкранного эффекта). PhotoViewer использует uiscrollview для создания того же эффекта, что и приложение Apple для фотографий. По какой-то причине иногда он анимируется вместе с моим кадром PhotoViewer, а иногда нет.
В первом примере вы видите, что он скачет при увеличении размера кадра, но хорошо анимируется при уменьшении размера кадра (и восстановлении панели вкладок).
Однако в этом примере, когда фотография расположена вертикально, она прыгает в обоих направлениях.
В обоих случаях, если я вообще увеличиваю фотографию с помощью прокрутки, она корректно анимируется в обоих направлениях.
Я знаю, что доказательства есть, но я не могу понять, что здесь происходит.
Вот мой блок анимации:
void (^updateProperties) (void) = ^ {
self.navigationController.navigationBar.alpha = hidden ? 0.0f : 1.0f;
self.navigationController.toolbar.alpha = hidden ? 0.0f : 1.0f;
if (self.tabBarController) {
int height = self.tabBarController.tabBar.bounds.size.height;
for(UIView *view in self.tabBarController.view.subviews)
{
int newHeight;
UIInterfaceOrientation orientation = [[UIApplication sharedApplication] statusBarOrientation];
if (UIInterfaceOrientationIsPortrait(orientation)) {
newHeight = hidden ? [[UIScreen mainScreen] bounds].size.height : [[UIScreen mainScreen] bounds].size.height - height;
} else {
newHeight = hidden ? [[UIScreen mainScreen] bounds].size.width : [[UIScreen mainScreen] bounds].size.width - height;
}
if([view isKindOfClass:[UITabBar class]])
{
[view setFrame:CGRectMake(view.frame.origin.x, newHeight, view.frame.size.width, view.frame.size.height)];
}
else
{
CGRect newFrame = CGRectMake(view.frame.origin.x, view.frame.origin.y, view.frame.size.width, newHeight);
[view setFrame:newFrame];
// update our VC frame with animation
[self.view setFrame:newFrame];
}
}
}
};
Код, адаптированный из поста на SO: UITabBar не будет скрывать
Полный источник на github .