使用 NativeScript 自定义 iOS 导航栏和状态栏

一则或许对你有用的小广告

欢迎加入小哈的星球 ,你将获得:专属的项目实战 / Java 学习路线 / 一对一提问 / 学习打卡/ 赠书活动

目前,正在 星球 内带小伙伴们做第一个项目:全栈前后端分离博客项目,采用技术栈 Spring Boot + Mybatis Plus + Vue 3.x + Vite 4手把手,前端 + 后端全栈开发,从 0 到 1 讲解每个功能点开发步骤,1v1 答疑,陪伴式直到项目上线,目前已更新了 204 小节,累计 32w+ 字,讲解图:1416 张,还在持续爆肝中,后续还会上新更多项目,目标是将 Java 领域典型的项目都整上,如秒杀系统、在线商城、IM 即时通讯、权限管理等等,已有 870+ 小伙伴加入,欢迎点击围观

随着我对 NativeScript 的了解越来越多,我真正投入的首要任务之一是学习如何为 iOS 应用程序自定义导航栏。 NativeScript 在路线图上有一个 Navbar 组件,但就目前而言,它需要一些关于 UINavigationControllers UIViewControllers 等的底层 iOS 实现的知识。但不要害怕!我曾冒过 StackOverflow 和 Objective-C 文档的险恶水域,最终毫发无损地取得了胜利。

在本文中,我将介绍您可能需要对导航栏或状态栏进行的一些更常见的调整。虽然 NativeScript 是一个跨平台框架,但这些调整特别适用于 iOS。但是,我将在此处介绍的大部分项目也可以针对 Android 实现。

在学习自定义 Navigation Bar 的过程中,我 从 Simon NG 在 AppCoda 上的这篇帖子 中得到了很多启发。这是一篇很棒的文章,它从 Objective-C 的角度介绍了可以对 iOS 导航栏和状态栏执行的大部分操作。我真的很喜欢帖子的布局方式,所以我将在这里使用大致相同的格式来讨论 NativeScript 中的 iOS 导航栏/状态栏:

  • 显示和隐藏导航栏
  • 设置导航栏标题
  • 隐藏后退按钮
  • 更改导航栏背景颜色
  • 更改标题文本颜色
  • 更改标题文本样式
  • 设置状态栏样式
  • 自定义后退按钮的颜色
  • 隐藏后退按钮
  • 添加新的按钮栏项目

NativeScript 默认导航

NativeScript 将加载的初始页面视为根视图控制器。之后导航到的任何视图都会使用 UINavigationController 推送到导航队列中。这意味着在第一个视图中,您根本看不到导航栏。在每个后续视图中,您会看到它包含一个“< 返回”按钮。

大多数已完成的调整都需要引用 UINavigationController 或当前的 UIViewController。您可以从 frames tns 模块获取对此控制器的引用。


 <Page xmlns="http://www.nativescript.org/tns.xsd" loaded="loaded" >
  <!-- ... -->
</Page>

 <Page xmlns="http://www.nativescript.org/tns.xsd" loaded="loaded" >
  <!-- ... -->
</Page>

显示和隐藏导航

框架模块引用允许在任何时间和任何页面上轻松显示/隐藏导航栏。


 <Page xmlns="http://www.nativescript.org/tns.xsd" loaded="loaded" >
  <!-- ... -->
</Page>

设置导航栏标题

更改标题真的很容易。只需使用公开 title 属性的 page.ios 应用程序对象。


 <Page xmlns="http://www.nativescript.org/tns.xsd" loaded="loaded" >
  <!-- ... -->
</Page>

隐藏后退按钮

有时可能需要隐藏后退按钮。在此处使用的示例中,用户使用 OAuth 登录到 Instagram,然后被重定向到提要页面。默认情况下,该提要页面显示一个后退按钮。

这并不理想,因为用户可能会返回到 OAuth 进程,应用程序将中断。隐藏后退按钮需要获取 UIViewController 的导航项的实例,并调用 setHidesBackButtonAnimated 方法。


 <Page xmlns="http://www.nativescript.org/tns.xsd" loaded="loaded" >
  <!-- ... -->
</Page>

更改导航栏背景颜色

默认的 iOS 颜色是可以的,但是没有一个漂亮的、漂亮的自定义导航栏颜色的应用程序是不完整的。使用 setBarTint 方法更改条形颜色。您可以使用 blueColor() 等系统常量,也可以使用 RGBA 定义自定义常量。我使用方便的程序 Sip ,它对颜色进行采样并自动以这种 RGBA 格式提供它们。


 <Page xmlns="http://www.nativescript.org/tns.xsd" loaded="loaded" >
  <!-- ... -->
</Page>

更改标题文本颜色

导航栏现在是非常时髦的蓝色阴影,但上面的文字仍然是黑色的,这不是很好看或时髦。如果是白色的就更好了。我们可以通过更改导航栏的 titleTextAttributes 来更改它。


 <Page xmlns="http://www.nativescript.org/tns.xsd" loaded="loaded" >
  <!-- ... -->
</Page>


更改标题文本样式

并不是说您 应该这样做 ,但是您也可以更改导航栏中文本的样式。例如,你可以给它一个漂亮的阴影来带回 90 年代后期的感觉。


 <Page xmlns="http://www.nativescript.org/tns.xsd" loaded="loaded" >
  <!-- ... -->
</Page>

设置状态栏样式

状态栏(时间、电池指示器)的默认样式为“深色”。这可以通过使用 UIStatusBarStyle 的有效映射枚举之一来更改。如果您想知道 NativeScript 如何为类映射 iOS 类型和函数,您可以在 ios.d.ts 文件内的 跨平台模块存储库中找到所有这些内容。无需做任何猜测。


 <Page xmlns="http://www.nativescript.org/tns.xsd" loaded="loaded" >
  <!-- ... -->
</Page>

更改后退按钮颜色

如果我们在这个页面上确实有一个后退按钮,它的颜色是错误的:

只需在 navigationBar 上设置色调颜色即可解决此问题。


 <Page xmlns="http://www.nativescript.org/tns.xsd" loaded="loaded" >
  <!-- ... -->
</Page>

将按钮添加到导航栏

可以使用标记将其他按钮添加到导航栏。


 <Page xmlns="http://www.nativescript.org/tns.xsd" loaded="loaded" >
  <!-- ... -->
</Page>

还可以通过构建 UIBarButtonItems 然后将它们添加到 navigationItem 上的 rightBarButtonItems 数组以编程方式添加按钮。


 <Page xmlns="http://www.nativescript.org/tns.xsd" loaded="loaded" >
  <!-- ... -->
</Page>

享受原住民

使用 NativeScript 时我最喜欢的部分之一是这种能力,只需放下并直接开始使用底层原生 API,而无需使用 Objective-C 使用的那种愚蠢的消息传递语法。一旦您掌握了 API 的工作原理以及 NativeScript 如何映射它们 ,您就可以使用 NativeScript 对您的应用程序进行大量自定义。