RTRootNavigationController 0.8.1

RTRootNavigationController 0.8.1

测试已测试
Lang语言 Obj-CObjective C
许可证 MIT
Released最后发布2023年11月

Ricky Tan 维护。




  • 作者
  • rickytan

RTRootNavigationController

CI Status Version License Platform

iPhone X

为了适配 iPhone X,我应该写多少代码?0。

我需要写多少代码来适配 iPhone X?0。

iphone-x

简介

越来越多的应用为每个不同的视图控制器设置自定义导航栏,而不是之前的一个全局统一的导航栏。

本项目旨在帮助开发者以一种巧妙的方式解决这一问题,开发者可以使用这种导航控制器以熟悉的方式,每个视图控制器都可以拥有独立的导航栏。

越来越多的应用为每一个 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

screenshot

scrreecap

使用方法

建议将 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, [emailŸprotected]

替代方案

集成的应用程序

许可证

RTRootNavigationController 在 MIT 许可证下可用。有关更多信息,请参阅 LICENSE 文件。