iOs 中所有 uiviewcontrollers 中的操作栏

Posted

技术标签:

【中文标题】iOs 中所有 uiviewcontrollers 中的操作栏【英文标题】:Action bar in all uiviewcontrollers in iOs 【发布时间】:2014-10-04 08:09:01 【问题描述】:

在 iO 中创建操作栏(仅一次)以在所有 UIViewController 中保持其位置/大小/内容的最佳方法是什么? 我可以为被推送的 UIViewController 设置动画而不为栏设置动画吗?

我正在检查是否可以使用 UIToolBarUINavigationController 来完成。我在正确的轨道上吗?

提前致谢

【问题讨论】:

两者都可以。如果您在 A UINavigationController 中嵌入 ViewController,则 push segue 会将 UINavigationBar 嵌入到下一个视图中。如果你有一个 UITAbBarController,你会为每个 UITabBarItem 获得不同的视图,但 UITAbBar 仍然存在。等等,对于 UITollBar。 感谢您的回复。请检查我对 Atif 的回答的评论以进行澄清:) @MinnesotaSteve 【参考方案1】:

是的,这就是要走的路。还可以使用会自动为您提供导航栏(操作栏)的导航层次结构。在 Tabbar 上,您必须创建不同的导航层次结构。

【讨论】:

感谢您的回复。我创建了一个嵌入到 UIViewController 的 UINavigationController 并按照我的意愿设计了这个栏。但是,当推送到另一个 UIViewController 时,这个栏会变成我不想要的“ 就像我说的,如果您使用导航控制器,它会自动提供给您。如果您想为所有视图控制器坚持使用单个导航栏,您可以将控制器扩展到您的基础并在那里设置您的导航栏,这对所有人都是一样的。 但是在这种情况下,当推送新的uiviewcontroller时,bar会动画并重新出现在屏幕上不是吗?不能这样做以使栏在此过渡期间保持静止吗? @AtifImran 你可以 pushViewController 与 Animation:NO 别担心,但请记住,UI 是特定于平台的东西,您应该尝试跟上它,直到并且除非您的应用程序中有特定点需要它。如果您尝试了太多在您正在开发的平台上没有实践过的事情,这也将成为应用拒绝的一个重点。【参考方案2】:

我最终做了以下事情:

1- 在故事板中创建了一个 UIViewController,其中包含一个设计为操作栏的 UIView,其下方是一个 容器

2-我将这个容器嵌入到另一个 UIViewController 中,在这种情况下它将成为根视图控制器

3-prepareForSegue 上,我保存了加载到容器中的 UIViewController 实例

4-在这个UIViewController和第二个之间切换:

UIViewController *newController = ...
UIViewController *oldController = ...

[oldController willMoveToParentViewController:nil];
[self addChildViewController:newController]; 

[self transitionFromViewController:oldController 
toViewController:newController 
duration:0.1
options:UIViewAnimationOptionTransitionNone
animations:^(void) 
    oldController.view.frame = CGRectMake(0 - width, 0, width, height);
    newController.view.frame = CGRectMake(0, 0, width, height);
 
completion:^(BOOL finished)
    [newController didMoveToParentViewController:self];


];

【讨论】:

以上是关于iOs 中所有 uiviewcontrollers 中的操作栏的主要内容,如果未能解决你的问题,请参考以下文章

iOS - UIVIewController 中的 UITableView 不显示所有行 [Swift]

如何在 iOS 中以编程方式从基本 UIViewController 向我的所有视图控制器添加视图

使用方法调配一次在所有 UIViewController 实例上更改 iOS13 上的 modalPresentationStyle

iOS 7 通用后台 UIViewController

iOS - 在 UINavigationController 中将 UIViewController 显示为全屏

iPad 上的 UIViewController 处理方向 iOS 6.0