NavigationItem
时间: 2025-08-11 15:58:48 浏览: 5
在iOS开发中,`UINavigationItem` 是导航栏中每个视图控制器的配置单元,它决定了导航栏上显示的内容和交互行为。通过 `UINavigationItem`,开发者可以设置标题、左右按钮项、搜索控制器、自定义标题视图等元素,从而实现丰富的导航界面。
### 导航栏项的基本配置
每个 `UIViewController` 在被嵌入到 `UINavigationController` 中时,会自动拥有一个 `navigationItem` 属性。通过这个属性,可以配置导航栏的外观和行为。例如,设置标题:
```swift
navigationItem.title = "首页"
```
设置左侧和右侧的按钮项:
```swift
let backButton = UIBarButtonItem(title: "返回", style: .plain, target: self, action: #selector(backTapped))
navigationItem.leftBarButtonItem = backButton
let infoButton = UIBarButtonItem(barButtonSystemItem: .info, target: self, action: #selector(infoTapped))
navigationItem.rightBarButtonItem = infoButton
```
### 搜索控制器的集成
从 iOS 11 开始,`UINavigationItem` 支持直接设置 `searchController`,这使得在导航栏中集成搜索功能变得非常简单。例如:
```swift
if #available(iOS 11, *) {
navigationItem.searchController = searchController
navigationItem.hidesSearchBarWhenScrolling = false
}
```
在更早的 iOS 版本中,需要将 `searchController.searchBar` 设置为 `titleView` 才能实现类似效果[^2]。
### 自定义标题视图
除了默认的标题文字,开发者还可以通过 `titleView` 属性设置自定义视图,例如一个 `UILabel` 或 `UIImageView`:
```swift
let titleLabel = UILabel()
titleLabel.text = "自定义标题"
titleLabel.textColor = .red
titleLabel.font = UIFont.boldSystemFont(ofSize: 18)
navigationItem.titleView = titleLabel
```
### 与框架的集成
虽然 `UINavigationItem` 是 UIKit 提供的基础类,但在实际开发中,开发者常常会借助第三方库来管理复杂的导航逻辑。例如,像 `AFNetworking` 这样的网络库虽然不直接与 `UINavigationItem` 交互,但在构建需要动态更新导航栏内容(如根据网络请求结果更改标题或按钮状态)的应用时,两者可以很好地协同工作[^3]。
此外,苹果官方推荐使用 Xcode 的代码片段功能来提高开发效率,尤其是在处理常见的 `UINavigationItem` 配置时,可以节省大量重复编码时间[^2]。
### 嵌套容器中的访问
在一个复杂的界面结构中,如 `UINavigationController` 嵌套在 `UITabBarController` 或 `UISplitViewController` 中时,可以通过 `UIViewController` 提供的便利属性(如 `navigationController`、`tabBarController` 和 `splitViewController`)快速访问其所在的容器对象,从而进一步控制 `UINavigationItem` 的行为[^1]。
---
阅读全文