我正在try 将导航添加到我的iOS应用程序中.我正在模拟iPhone 15,在Xcode 15上运行iOS 17,在Swift 5.8上运行.

I have seen in several tutorials that when Navigation Controller is added to storyboard via Editor -> Embed in -> Navigation Controller a Navigation Bar should be immediately visible on the preview, like this: iPhone preview with Navigation Bar

But instead I cannot see anything: iPhone preview without Navigation Bar

我没有更改导航栏的任何属性(顺便说一句,它实际上出现在视图层次 struct 中). 我做错什么了?

推荐答案

在iOS 15中更改了导航栏的默认外观.从TN3106开始:

IOS 15中的UINavigationBar对其外观设置进行了更改.它将其scrollEdgeAppearance的使用扩展到所有导航栏样式,默认情况下,scrollEdgeAppearance会生成透明背景.

现在,导航栏的默认背景是透明的,这就是为什么你看不到它的原因.

您应该使用UINavigationBarAppearance API来配置导航栏.要获得像以前一样的半透明背景,您应该将配置了"默认背景"的UINavigationBarAppearance指定给navigationBar.scrollEdgeAppearance.

let appearance = UINavigationBarAppearance()
appearance.configureWithDefaultBackground()
navigationController?.navigationBar.scrollEdgeAppearance = appearance

如果为nil(默认设置),则将使用standardAppearance的透明版本.

要在情节提要中执行此操作,您可以 Select 层次 struct 中的导航栏,并选中"滚动边"复选框:

enter image description here

请注意,连接到UINavigationController的视图控制器的导航栏仍会错误地显示透明导航栏(不确定这是否是故意的).当你构建和运行应用程序时,它确实会显示出预期的行为.

有关定制导航栏的更多方式,请参见TN3106.

Ios相关问答推荐

Xcode15.3上的生成错误:调用的对象类型';facebook::flipper::SocketCertificateProvider';不是函数或函数指针

在选项卡内列出导航内视图断开导航标题的动画

如何在SwiftUI中扩展双击的可检测区域?

在视图上执行手势会阻止相机操作

CIKernel的Metal Shader裁剪问题

许多文本字段的性能问题

如何通过点击按钮滚动到 ScrollView 中的特定视图?

为什么这个 init 被分派到一个内部扩展 init?

如何擦除 Swift 中的 Core Graphics Context 绘图?

在 Swift 中使用 UITesting 捕获屏幕录像

从父母到子元素的 Swift Pass 事件

使用 @MainActor 更新 UI 的适当策略是什么?

将 SwiftUI 与 @AppStorage 和动态函数调用一起使用

滑动列表项以获取更多选项(Flutter)

Xcode 项目格式:3.1、3.2、6.3 和 8.0 有什么区别?

如何比较两个 UIImage 对象

在 iPhone 应用程序中使用 SSL - 出口合规性

有没有办法在应用store 之外分发 ios 应用程序?

以编程方式确定 iPhone 是否越狱

在 SKScene 中设置按钮