新的iOS 15使导航条背景完全透明--如果后面没有元素,如果有一个列表,然后滚动导航栏后面的元素--这将获得一个白色的半透明背景,但是如果我使用的是TabView,其中每个TabItem在导航栏背景中都有一个列表,在选项卡项之间切换时没有正确更新,导航栏始终保持透明背景。
我正在使用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")
}
}
}因此,这段代码形成了一个有五个选项卡的表视图,每个选项卡都有一个包含10个文本视图的列表,如果我切换到任何其他选项卡并将元素滚动到顶部,则可以通过导航条而不是后面看到列表。

是什么导致了这种行为?是某种错误还是我的代码错了?这个问题在iOS 14.*中没有发生,因为导航栏总是有白色的背景。
注意:我发现可以使用::
if #available(iOS 15, *) {
let appearance = UINavigationBarAppearance()
appearance.configureWithOpaqueBackground()
UINavigationBar.appearance().standardAppearance = appearance
UINavigationBar.appearance().scrollEdgeAppearance = appearance
}...in,我的ApDelegate,但这看起来是一个棘手的方法,以摆脱透明的导航栏。如果苹果决定在iOS 15中使用这个新设计,我想在我的应用程序中实现它,但前提是透明更新是正确的。
发布于 2021-10-14 07:19:59
是的,苹果在iOS 15中改变了这一点。
如果要在单个ViewController中更改导航栏的外观,可以使用以下代码:https://stackoverflow.com/a/69493819/9263676
https://stackoverflow.com/questions/69563463
复制相似问题