关于ios:UINavigationBar框架动画不可能吗?

UINavigationBar frame animation not possible?

UINavigationController中的

UINavigationBars。 。 。他们不参与帧动画。有用,但现在不是我想要的。有没有办法关闭此功能?

我知道我可以将showsNagitationBar属性设置为hidden,然后将自己的属性添加到视图中,以便研究可能的替代方案。

我要实现的目标:

我已经将UINavigationController放入(屏幕大小)容器视图中,并希望将其滑动以显示侧面菜单。 。上一次这样做时,我在RootVC上有自定义的push / pop方法,而且我自己的导航栏也很好用,尽管要设置大量样板代码。

这次我有相同的要求-主要内容是基于推送/弹出,还有一些可以从侧面显示的辅助VC。因此,对于另一种方法,并考虑到该应用程序的外观和感觉是非常标准的,我只是在RootVC中包含了UINavigationController,并希望它能够正常工作。

但是,UINavigationBar保持锚定在原处,而容器视图中的其余内容在移动。


我不确定您要实现的目标,但使用导航控制器时,您在屏幕上看到的全部内容(顶视图控制器的视图加上导航栏)都植根于导航控制器的视图。

这意味着如果您执行以下操作:

1
2
3
4
5
[UIView animateWithDuration:1.0 animations:^{
    CGRect frame = self.navigationController.view.frame;
    frame.size.width -= 30;
    self.navigationController.view.frame = frame;
}];

您将获得视图,并且导航栏将缩小。

编辑:您可以在适当的位置将滑入式视图添加/删除到导航控制器的视图中(例如,导航控制器是您的根视图控制器,您可以在appdelegate的didFinishLaunch:方法中进行操作)。下面的代码将显示一个完全红色的视图,该视图从左侧滑入。在您的情况下,此视图将是侧视图控制器中的视图。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
UIView *left = [[UIView alloc] initWithFrame:[[UIScreen mainScreen] bounds]];
left.backgroundColor = [UIColor redColor];

CGRect ff = left.frame;
ff.origin.x = -ff.size.width;
left.frame = ff;

[self.navigationController.view addSubview:left];

[UIView animateWithDuration:1.0 animations:^{
    CGRect frame = self.navigationController.view.frame;
    frame.origin.x += 50;
    self.navigationController.view.frame = frame;
}];

您正在寻找这样的东西吗?