隐藏iPhone工具栏时的动画问题

时间:2010-02-17 19:48:23

标签: iphone cocoa-touch uikit

我的RootViewController中有一个工具栏,然后使用以下代码隐藏SubViewController中的工具栏:

RootViewController

- (void)viewDidLoad {
    ...
    [self.navigationController setToolbarHidden:FALSE animated:FALSE];
    ...
}

- (void)viewDidAppear:(BOOL)animated {
    [self.navigationController setToolbarHidden:FALSE animated:TRUE];
    [super viewDidAppear:animated];
}

SubViewController

- (void)viewDidLoad {
    ...
[self.navigationController setToolbarHidden:YES animated:YES];
    [super viewDidLoad];
}

这一切都按预期工作,即当从一个视图移动到另一个视图再返回时,工具栏将使用漂亮的垂直动画隐藏和取消隐藏。

然而,从RootViewController移动到SubViewController时似乎存在令人讨厌的动画问题。当工具栏被隐藏时,工具栏上会出现一个白条,然后从右到左快速消失在屏幕上。

希望我已经足够清楚地解释了这一点。

任何想法如何解决这个问题?

5 个答案:

答案 0 :(得分:1)

您是否尝试使用SubViewController的{​​{1}}方法制作动画?你可能会有更好的运气。

答案 1 :(得分:1)

我已经多次看到这个问题,并且我发现在setToolbarHidden:animated:方法中调用viewWillAppear:并不总能提供没有白色矩形工件的平滑动画。

始终有效的方法是将setToolbarHidden:animated:调用放入viewDidAppear:方法。这意味着在导航控制器完成将新视图推入堆栈后触发工具栏隐藏动画,因此没有白色矩形。但是,这也意味着整个动画分为两个阶段:第一个为视图设置动画,第二个隐藏工具栏,因此您可以隐藏“延迟”工具栏的外观。我承认这并不总是你想要的。

答案 2 :(得分:1)

尝试这个

- (IBAction)hideTheToolBar:(id)sender{
    //[toolBar setHidden:YES];
    if (toolBar.hidden == NO)
    {
        [UIView animateWithDuration:0.25 delay:0.0
                            options:UIViewAnimationOptionCurveLinear | UIViewAnimationOptionAllowUserInteraction
                         animations:^(void)
         {
             toolBar.alpha = 0.0f;
         }
                         completion:^(BOOL finished)
         {
             toolBar.hidden = YES;
         }
         ];
    }
}

答案 3 :(得分:0)

您可以(可能应该)在子视图控制器的指定初始化程序中执行此操作,例如initWithNibName:bundle:

答案 4 :(得分:0)

我发现在视图控制器的init中设置hidesBottomBarWhenPushed属性非常有用。

例如:

- (id)init
{
    self = [super initWithStyle:UITableViewStyleGrouped];
    if (self) {
        // Custom initialization
        self.navigationItem.rightBarButtonItem = self.editButtonItem;
        self.hidesBottomBarWhenPushed = YES;
    }
    return self;
}

它隐藏了推送和弹出过渡中出现的虚假工具栏。此外,它使您无需手动隐藏ViewWillAppear方法或类似方法中的工具栏。