iOS SwiftUI:ScrollView 忽略顶部安全区域

Posted

技术标签:

【中文标题】iOS SwiftUI:ScrollView 忽略顶部安全区域【英文标题】:iOS SwiftUI: ScrollView ignore top safe area 【发布时间】:2019-12-02 10:31:55 【问题描述】:

我的应用中有一个共享视图,可以在不同的地方调用。 此视图的根是滚动视图,但有时它会忽略顶部安全区域并折叠在导航栏下方。

这里有两张更能说明问题的截图:

正如您在第二个屏幕截图中看到的那样,滚动视图扩展了所有在导航下折叠的屏幕。 我怎样才能避免这种情况?

【问题讨论】:

提供试用码。 由于隐私问题无法提供代码,但我已使用 .navigationViewStyle(StackNavigationViewStyle()) 进行了修复 【参考方案1】:

.padding(.top, 1) 添加到滚动视图将解决此问题。

【讨论】:

不是一个完美的解决方案,但它确实解决了问题。您将如何做到这一点,以便导航标题在滚动期间被固定?【参考方案2】:

解决方法:

.navigationViewStyle(StackNavigationViewStyle())

在所有的 NavigationView 中

【讨论】:

有人有其他解决方案吗?这对我不起作用 它不工作。 这不起作用,因为它只会更改 iPad 上 NavigationView 样式的一些不相关属性。与问题无关。【参考方案3】:

我在 NavigationView 中的 List 遇到了类似的问题,并忽略了底部安全区域。 帮助我的是将列表底部填充设置为一些非零值,如下所示:

.padding(.bottom, 1)

它看起来像一个错误,这个问题在 ios 15.2 上仍然存在

【讨论】:

【参考方案4】:

您可以通过为滚动视图提供填充来解决它

ScrollView 
    VStack(spacing: 0) 
      
        Text("test")
        Text("test")
        Text("test")
        Text("test")
        Text("test")
        
    

.padding(.top, UIApplication.shared.windows.first!.safeAreaInsets.top )

【讨论】:

【参考方案5】:

Ihor Vovk's solution works perfectly,但如果您不想要可见的填充,只需将其更改为 .padding(.top, 0.1)。 (我测试过,0.1 是使它工作的最小可能值)

【讨论】:

以上是关于iOS SwiftUI:ScrollView 忽略顶部安全区域的主要内容,如果未能解决你的问题,请参考以下文章

在 iOS 13 上以编程方式滚动 SwiftUI ScrollView

ScrollView 或 List,如何制作特定的可滚动视图 (SwiftUI)

水平 ScrollView 在 SwiftUI 中在更改时垂直反弹

SwiftUI Horizo​​ntal ScrollView 项目在 iOS 14.3 中滚动时变得不可见,但在 iOS 13 中工作正常

SwiftUI: ScrollView offset

更改 ScrollView SwiftUI 的背景颜色