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 Horizontal ScrollView 项目在 iOS 14.3 中滚动时变得不可见,但在 iOS 13 中工作正常