我的应用程序包含一个表视图控制器和一个视图控制器。当我按下表格视图中的单元格时,该视图中的工具栏会在屏幕外滑动动画,当我在视图控制器中并向后按时,工具栏会向上滑动到原始位置。我的问题是,我想出了一个错误,当我在视图控制器中并按下主页按钮退出应用程序然后回来。应用程序恢复我离开的位置但当我返回到桌面视图时,工具栏向上移动超出其原始位置。当我在应用程序退出之前,工具栏的滑动工作正常。所以有一些东西被调用来重置工具栏到它的原点,从而添加额外的y轴点向上移动更多。有谁知道那些方法是什么?
代码:
我在视图控制器的viewWillAppear方法中有这个:
[UIView animateWithDuration:0.7 animations:^{
self.navigationController.toolbar.center = CGPointMake(self.navigationController.toolbar.center.x, self.navigationController.toolbar.center.y + self.navigationController.toolbar.frame.size.height);
} completion:^(BOOL finished){
self.navigationController.toolbar.hidden = YES;
}];
并且在相同的视图中,当它需要消失时,我在viewWillDisappear中添加了它:
[[self.navigationController toolbar] setHidden:NO];
[UIView animateWithDuration:1 animations:^{
self.navigationController.toolbar.center = CGPointMake(self.navigationController.toolbar.center.x, self.navigationController.toolbar.center.y - self.navigationController.toolbar.frame.size.height);
} completion:^(BOOL finished){
}];
我试过这个作为动画隐藏工具栏动画的另一种方法,但没有动画:
- (void) viewWillAppear:(BOOL)animated
{
[self.picker setHidden:YES];
[self.navigationController setToolbarHidden:YES animated:YES];
}
- (void) viewWillDisappear:(BOOL)animated
{
[self.navigationController setToolbarHidden:NO animated:YES];
[self.course setValue:self.nameTextField.text forKey:@"courseName"];
[self.course setValue:[NSNumber numberWithInt:[self.creditsTextfield.text integerValue]] forKey:@"courseCredits"];
[self.course setValue:[NSNumber numberWithInt:[self.chaptersTextfield.text integerValue]] forKey:@"courseChapters"];
[self.course setValue:self.gradeTextfield.text forKey:@"courseGrade"];
}
答案 0 :(得分:0)
首先,你应该使用frame而不是center,但是用这个替换viewWillDisappear动画行:
self.navigationController.toolbar.frame = CGRectMake(0,0,self.navigationController.toolbar.frame.size.width, self.navigationController.toolbar.frame.size.height);
并告诉我会发生什么......
那应该解决你的问题。
答案 1 :(得分:0)
由于您使用的是属于UINavigationController的工具栏(而不是由您自己的控制器实例化并添加到UIView的独立UIToolbar),因此最好使用UINavigationController公开的方法,因为您不知道它是如何管理的并移动它的UIToolbar。
尝试将此放在viewWillAppear:中,而不是整个动画块
[self.navigationController setToolbarHidden:NO animated:YES];
并在viewWillDisappear中显示:
[self.navigationController setToolbarHidden:YES animated:YES];
答案 2 :(得分:0)
self.navigationController.toolbar.center = CGPointMake(self.navigationController.toolbar.center.x, 458);
self.navigationController.toolbar.center = CGPointMake(self.navigationController.toolbar.center.x, self.navigationController.toolbar.center.y + self.navigationController.toolbar.frame.size.height);
因为问题似乎是当应用程序变为背景时,前景工具栏将重置为其原始位置,因此在导航回表格视图后,工具栏将移动到其原始位置之外。因此我添加的第一行将工具栏重置为原始位置,同时仍然隐藏然后将其向下移动。之后,动画块就完成了。我做了这个,以便动画适用于以下情况: 1.用户从表视图中输入详细信息视图,然后返回到tableview而不退出应用程序。 2.用户从tableview输入详细信息视图,然后退出应用程序,然后恢复应用程序并返回到表格视图。