【发布时间】:2021-12-02 09:41:09
【问题描述】:
如果后面没有元素,新的 iOS 15 使导航栏背景完全透明,如果有一个 List 并且您滚动元素到导航栏后面,这将获得白色半透明背景,但如果我使用 TabView TabItem在导航栏内有一个List,在标签项之间切换时背景没有正确更新,导航栏始终保持透明背景。
我正在使用 SwiftUI,我的基本代码如下所示:
struct Main: View {
var body: some View {
WindowGroup {
NavigationView {
TabView {
TabElement()
TabElement()
TabElement()
TabElement()
TabElement()
}.navigationBarTitle(Text("Main"), displayMode: .inline).navigationBarBackButtonHidden(true)
}
}
}
}
struct TabElement: View {
var body: some View {
VStack {
List {
Text("empty")
Text("empty")
Text("empty")
Text("empty")
Text("empty")
Text("empty")
Text("empty")
Text("empty")
Text("empty")
Text("empty")
}.listStyle(InsetGroupedListStyle())
}.tabItem {
Image(systemName: "star.fill")
Text("dummy")
}
}
}
因此,这段代码创建了一个带有五个选项卡的选项卡视图,每个选项卡都有一个包含十个文本视图的列表,如果我切换到任何其他选项卡并将元素滚动到顶部,则可以通过导航栏而不是通过导航栏看到该列表后面。
是什么导致了这种行为?这是某种错误还是我的代码错误?这个问题在 iOS 14 中没有发生。* 因为导航栏总是有白色背景。
注意: 我发现可以使用:
if #available(iOS 15, *) {
let appearance = UINavigationBarAppearance()
appearance.configureWithOpaqueBackground()
UINavigationBar.appearance().standardAppearance = appearance
UINavigationBar.appearance().scrollEdgeAppearance = appearance
}
...在我的ApDelegate 中,但它看起来像是摆脱导航栏透明度的一种棘手方法。如果 Apple 决定在 iOS 15 中使用这种新设计,我想在我的应用中实现它,但前提是透明度更新正确。
【问题讨论】:
标签: swift swiftui navigationbar tabview ios15