我为创建平滑的视图转换所做的工作:
1) 在 Interface Builder 中,基本上位于导航栏和工具栏之间的视图不应自动调整其内容(例如图片)的大小,因此我取消了 Autoresize Subviews 标志
2)然后为隐藏/取消隐藏事件创建了以下触摸处理程序。关键是使用
[UIView transitionWithView:self.view
duration:UINavigationControllerHideShowBarDuration
options:UIViewAnimationOptionCurveLinear
animations:^
{
/* Put other animation code here ;) */
}];
为内置隐藏/取消隐藏动画添加额外动画的代码片段。
最初我尝试简单:隐藏/取消隐藏两个栏并让 iOS 调整内部视图的大小。结果(在模拟器上)令人失望,并不顺利。如果我只隐藏一个条,它可以很好地调整视图大小,但在代码中没有两个条。
所以这里是完整的touchBegun事件处理程序,它可以做到这一点:
- (void) touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event {
AppDelegate *app = (AppDelegate*) [[UIApplication sharedApplication] delegate];
if (blVisible) {
[app.navigationController setToolbarHidden:YES animated:YES];
[app.navigationController setNavigationBarHidden:YES animated:YES];
[UIView transitionWithView:self.view
duration:UINavigationControllerHideShowBarDuration
options:UIViewAnimationOptionCurveLinear
animations:^
{
/* Put other animation code here ;) */
self.img.frame = CGRectMake(0, 0, 320, 480);
}
completion:^(BOOL finished)
{
}];
} else {
[app.navigationController setToolbarHidden:NO animated:YES];
[app.navigationController setNavigationBarHidden:NO animated:YES];
[UIView transitionWithView:self.view
duration:UINavigationControllerHideShowBarDuration
options:UIViewAnimationOptionCurveLinear
animations:^
{
/* Put other animation code here ;) */
self.img.frame = CGRectMake(0, 0, 320, 387);
}
completion:^(BOOL finished)
{
}];
}
blVisible = !blVisible;
}
一个小评论:现在很流畅,但在模拟器中我看到的是 iOS 以某种方式隐藏/取消隐藏了两个不同步的栏,因此视图调整大小的时间并不完美。请检查设备。
如果您想要更完美的解决方案,我认为您必须自己实现条形以完全控制它们的隐藏/取消隐藏效果......