0

我有一个 tabbarview 应用程序,其中一个选项卡中有一个按钮。当按下该按钮时,会发生一些事情,并且用户将切换到另一个选项卡。

我在那个按钮上做了一个动画:

UIView * fromView = self.tabBarController.selectedViewController.view;
UIView * toView = [[self.tabBarController.viewControllers objectAtIndex:0] view];
[UIView transitionFromView:fromView 
                    toView:toView 
                  duration:0.6 
                   options:(UIViewAnimationOptionTransitionCurlDown)
                completion:^(BOOL finished) {
                    if (finished) {
                        self.tabBarController.selectedIndex = 0;
                    }
                }];

我从这里得到的。然而问题是,在动画之后,我在屏幕顶部似乎有一个与状态栏一样高的间隙。有谁知道这是什么原因造成的?当动画结束时,这个差距很快就缩小了(这就是我们做的时候self.tabBarController.selectedIndex = 0

对不起,我不得不隐藏一些细节

顺便说一句,如果我将动画换成其他东西甚至没有动画,问题仍然存在。

附加信息,这是框架详细信息:

from frame: x:0.000000, y:0.000000, w:320.000000, h:411.000000
to frame: x:0.000000, y:0.000000, w:320.000000, h:431.000000
4

2 回答 2

0

标签栏控制器的区域也覆盖了状态栏下方的区域。所以它自己的客户端视图的 origin.y 为 20。

因此,您需要在调用转换之前正确设置传入的视图框架。

于 2011-06-20T05:37:09.627 回答
0

我找到了一种非常hacky的方法:

CGRect to = fromView.superview.frame;
to.origin.y -= 20;
fromView.superview.frame = to;

任何可以向我解释为什么我必须这样做以及更优雅的方式来做到这一点的人都会得到接受的答案。

于 2011-06-20T07:15:48.050 回答