RTRootNavigationController
iPhone X
为了适配 iPhone X,我应该写多少代码?0。
我需要写多少代码来适配 iPhone X?0。
简介
越来越多的应用为每个不同的视图控制器设置自定义导航栏,而不是之前的一个全局统一的导航栏。
本项目旨在帮助开发者以一种巧妙的方式解决这一问题,开发者可以使用这种导航控制器以熟悉的方式,每个视图控制器都可以拥有独立的导航栏。
越来越多的应用为每一个 VC 设置单独的导航条,而不是之前那样使用一个全局统一的导航条,因为不同的 VC 有不同的视觉样式,前一个是蓝色的,后一个也许要做成红色、透明,或者干脆没有导航条。
尽管开发者可以在每个 VC 的 - (void)viewWillAppear
(想想为什么不是 - (void)viewDidLoad
) 方法中设置自己的样式,但是如果在同一个导航条上来回修改,稍有疏忽就可能导致样式混乱。
- 另一种方法是将全局导航条隐藏,每个 VC 通过
addSubview:(UIView *)view
的方式自己设置导航条。这种实现是可行的,但使用起来不方便,例如: - 无法使用
self.navigationItem.rightBarButtonItem
等来设置导航按钮,而必须自己手动添加到navigationBar
上; - 无法使用
self.title
来修改导航标题,而必须自己添加监听; - 无法方便地设置
navigationBarHidden
;
无法方便地自动调整 contentInsets
。
等等。
特性
-
支持自定义导航栏类
-
支持回滚
-
支持旋转
-
支持交互式弹出启用和禁用
-
支持
Interface Builder
-
每个 VC 支持自定义的
navigationBarClass
-
支持
unwind
(不知道什么是unwind
?请参考:这里) -
支持转屏
-
支持禁用交互式返回
-
支持
Interface Builder
使用方法
建议将 RTRootNavigationController
设置为你的根视图控制器
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
UIViewController *yourController = ...;
self.window.rootViewController = [[RTRootNavigationController alloc] initWithRootViewController:yourController];
return YES;
}
你可以实现以下方法来自定义返回按钮(推荐)
- (UIBarButtonItem *)rt_customBackItemWithTarget:(id)target
action:(SEL)action
{
return [[UIBarButtonItem alloc] initWithTitle:NSLocalizedString(@"Back", nil)
style:UIBarButtonItemStylePlain
target:target
action:action];
}
或只需将 useSystemBackBarButtonItem
设置为 YES 并使用默认的一个。
要运行示例项目,首先从 Example 目录中克隆 repo,然后运行 pod install
。
注意(仅适用于 v0.6 以下)
你的 ViewController 层级将变为
RTRootNavigationController
`- RTContainerViewController
| `- RTContainerNavigationController
| `- YourViewController1
`- RTContainerViewController
`- RTContainerNavigationController
`- YourViewController2
因此,如果你访问 self.navigationController
,它将返回一个容器导航控制器,其 viewControllers
将始终为 1,即 self
。相反,你必须使用 self.rt_navigationController.rt_viewController
来获取所有同级,如以下链接所述:
需求
- iOS 7 及以上
- Xcode 7 及以上
安装
RTRootNavigationController 可通过 CocoaPods 获取。要安装它,只需将以下行添加到您的 Podfile 中即可
pod "RTRootNavigationController"
作者
rickytan, [emailprotected]
替代方案
- JTNavigationController
- 支持全屏返回
- FDFullscreenPopGesture
- 使用原生的 UINavigationController,在
- (void)viewWillAppear
中做处理 - 支持全屏返回
- 使用原生的 UINavigationController,在
集成的应用程序
许可证
RTRootNavigationController 在 MIT 许可证下可用。有关更多信息,请参阅 LICENSE 文件。