SwiftUI TabView 与 PageTabViewStyle 在设备上的横向与 safeArea 添加奇数前沿插图

Posted

技术标签:

【中文标题】SwiftUI TabView 与 PageTabViewStyle 在设备上的横向与 safeArea 添加奇数前沿插图【英文标题】:SwiftUI TabView with PageTabViewStyle in Landscape on device with safeArea adding odd leading edge inset 【发布时间】:2021-10-14 00:03:10 【问题描述】:

我有一个带有 PageTabViewStyle 的 TabView,当我的设备处于横向时,前缘有一个奇怪的插图。这在没有安全区域的设备上不存在,并且在纵向的任何边缘上也不存在。

struct ContentView: View 

    var body: some View 
        TabView 
            Color.red
                .edgesIgnoringSafeArea(.all)
        
        .tabViewStyle(PageTabViewStyle())
        .edgesIgnoringSafeArea(.all)
    

【问题讨论】:

【参考方案1】:

那将是 TabView 这样做。这实际上是“先前”视图,对于您的设置来说,这将是一个空视图。您可以查看是否在横向运行此代码:

var body: some View 
    TabView 
        Color.red
            .edgesIgnoringSafeArea(.all)
        Color.green
            .edgesIgnoringSafeArea(.all)
        Color.blue
            .edgesIgnoringSafeArea(.all)
    
    .tabViewStyle(PageTabViewStyle())
    .edgesIgnoringSafeArea(.all)

然后滑动到下一个视图。你会看到屏幕的那部分变成了红色。再次滑动,它变成蓝色。

解决方法:在TabView 上设置一个.frame,即设备大小,但所有这些都在一个ScrollView 中,并在其上放置一个.edgesIgnoringSafeArea(.all)

var body: some View 
    ScrollView 
        TabView 
            Color.red
            Color.green
            Color.blue
        
        .frame(
            width: UIScreen.main.bounds.width ,
            height: UIScreen.main.bounds.height
        )
        .tabViewStyle(PageTabViewStyle())
    
    .edgesIgnoringSafeArea(.all)

是的,TabView 可以垂直滚动,但会弹回。

【讨论】:

不知道为什么它有效,但它确实有效。非常感谢。很棒的解决方案。 我把它全部放在 GeometryReader 中并使用尺寸代理而不是使用 UIScreen 但结果相同。再次感谢。 也可以通过 ScrollView(.horizo​​ntal) 摆脱弹跳问题【参考方案2】:

如果你只想全屏显示背景,试试这样:

var body: some View 
    ZStack 
        // Background ignoring safe area
        LinearGradient(colors: [Color(hue: 0.106, saturation: 0.234, brightness: 0.922, opacity: 1.0), Color.white], startPoint: .top, endPoint: .bottom)
            .edgesIgnoringSafeArea(.all)
        // TabView
        TabView() 
            Onboarding1()
            Onboarding2()
            Onboarding3()
        
        .tabViewStyle(PageTabViewStyle())
    

【讨论】:

以上是关于SwiftUI TabView 与 PageTabViewStyle 在设备上的横向与 safeArea 添加奇数前沿插图的主要内容,如果未能解决你的问题,请参考以下文章

在 SwiftUI 中构建一个自定义的类 TabView 视图

SwiftUI 有啥方法可以创建一个 TabView 来显示 Tab Item 下面的 View

SwiftUI 无限 TabView 项

SwiftUI:在 TabView 中调整图像的位置

带有 TabView、SwiftUI 的水平分页滚动视图

在 SwiftUI 中的 tabview 中嵌入 webview