我正在尝试隐藏我的NavigationBar和状态栏(向上滑动动画),我遇到了一个问题。
当状态栏可见时,位于0点(x:0)的每个元素的原点意味着位于状态栏下方。但是,当隐藏状态栏时,0(x:0)点会更新以容纳新空间,0(x:0)表示屏幕的绝对顶部。
当我隐藏状态栏并旋转到横向时,视图会自动调整并移动所有内容以使用状态栏的空间,并抛出我的动画:
if (![[UIApplication sharedApplication] isStatusBarHidden]) {
// Change to fullscreen mode
// Hide status bar and navigation bar
[[UIApplication sharedApplication] setStatusBarHidden:YES
withAnimation:UIStatusBarAnimationSlide];
[UIView animateWithDuration:animationDuration animations:^{
navBar.frame = CGRectMake(navBar.frame.origin.x,
-navBar.frame.size.height-20,
navBar.frame.size.width,
navBar.frame.size.height);
} completion:^(BOOL finished) {
[navBar setHidden:TRUE];
}];
} else {
// Change to regular mode
// Show status bar and navigation bar
[navBar setHidden:FALSE];
[[UIApplication sharedApplication] setStatusBarHidden:NO
withAnimation:UIStatusBarAnimationSlide];
[UIView animateWithDuration:animationDuration animations:^{
navBar.frame = CGRectMake(navBar.frame.origin.x,
0,
navBar.frame.size.width,
navBar.frame.size.height);
} completion:^(BOOL finished) {
}];
}
有什么建议吗?
编辑:以下是轮播重播后屏幕的样子:Image
答案 0 :(得分:1)
你将屏幕的细分混淆到了UIView区域。
当您在导航控制器中时,有三种视图:
因此Nav控制器正在管理它自己的根视图。因为它在顶部填充了一个NavigationBar,而其余的区域内部有一个大的UIView。
当您将您的视图控制器推送到导航堆栈时,Nav控制器正在添加您的根视图作为内容。因此,您的整个“self.view”完全包含在Nav控制器的“内容”视图中。
当然,当Nav控制器隐藏导航栏时......“内容”视图会向上扩展以填充空间。然后该视图告诉您的视图“嘿,有比您使用的空间更多的空间,因此您的视图也会扩展为完全填充Nav控制器的内容视图。
因此,您的视图的“0”点始终是您的视图的顶部。这永远不会改变。更改的是“视图顶部”相对于屏幕顶部边缘的位置。
如果您想要在删除导航栏时将内容保留在屏幕上的同一位置,那么您将不得不考虑到现在您的“零”点高于导航栏时的“零”点这一事实推送内容视图。