新的 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")
}
}
}
因此,这段代码创建了一个包含五个选项卡的选项卡视图,每个选项卡都有一个包含十个文本视图的列表,如果我切换到任何其他选项卡并将元素滚动到顶部,则可以通过导航栏而不是后面看到该列表。
是什么导致了这种行为?这是某种错误还是我的代码错误?此问题在 iOS 14.* 中不会发生,因为导航栏始终具有白色背景。
NOTE:我发现可以使用:
if #available(iOS 15, *) {
let appearance = UINavigationBarAppearance()
appearance.configureWithOpaqueBackground()
UINavigationBar.appearance().standardAppearance = appearance
UINavigationBar.appearance().scrollEdgeAppearance = appearance
}
...在我的ApDelegate
但这看起来是消除导航栏中透明度的一种棘手方法。如果 Apple 决定在 iOS 15 中使用这种新设计,我想在我的应用程序中实现它,但前提是透明度更新正确。
是的,苹果在 iOS 15 中改变了这一点。
如果你想改变单个ViewController中导航栏的外观,你可以使用以下代码:https://stackoverflow.com/a/69493819/9263676 https://stackoverflow.com/a/69493819/9263676
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)