SwiftUI:在 ScrollView 或 List 中时,PageTabViewStyle() 新损坏?

Posted

技术标签:

【中文标题】SwiftUI:在 ScrollView 或 List 中时,PageTabViewStyle() 新损坏?【英文标题】:SwiftUI: PageTabViewStyle() newly broken when inside ScrollView or List? 【发布时间】:2021-05-25 18:13:21 【问题描述】:

所以这个错误突然出现了。我有一个带有 PageTabViewStyle() 的 TabView,用于在 ScrollView 中显示图像。图片下方是其他内容(标题、文本等,与本示例无关)。

过去一切正常,但在最近的更新之后,PageTabView 在 ScrollView 或 List 中无法正确显示!我测试了用 VStack 替换 ScrollView,它看起来应该如此 - 但我失去了我想要的功能,即带有图像和文本的滚动视图。

它应该看起来如何(直到最近才看起来):https://imgur.com/a/6hEk0x7

现在的样子:https://imgur.com/a/ZFhk1XO

任何解决方案将不胜感激!

// images is an array of identifiable strings, corresponding to images in assets

ScrollView 

  TabView 
    ForEach(images)  image in
      Image(image)
        .resizable()
        .scaledToFill()
        .frame(width: UIScreen.main.bounds.width - 32, height: UIScreen.main.bounds.height / 3.5)
        .clipShape(RoundedRectangle(cornerRadius: 20))
     //: ForEach
   //: TabView
  .tabViewStyle(PageTabViewStyle())

  // other content (header, text etc)...


【问题讨论】:

图片下方的其他内容是否也横向滚动? 不,其他内容应该垂直滚动(现在我发现我错误地输入了 HStack 而不是 VStack,抱歉造成混淆)。所以要清楚,一切都应该垂直滚动(经典的细节视图)。唯一的水平滚动应该在 TabView 中启用,在图像本身上。 【参考方案1】:

如果您将 PageTabView 嵌入到 ScrollView 中,则显式指定 TabView 的高度:

ScrollView(.vertical, showsIndicators: false)
    TabView
        Image("imageName")
            .resizable()
            .scaledToFill()
    
    .tabViewStyle(PageTabViewStyle())
    .frame(height: 300)

您可以根据需要自定义。

【讨论】:

成功了,谢谢!

以上是关于SwiftUI:在 ScrollView 或 List 中时,PageTabViewStyle() 新损坏?的主要内容,如果未能解决你的问题,请参考以下文章

如何在 Swiftui 中与其他组件一起在 ScrollView 或 VStack 中完全显示 Picker?

SwiftUI 中 ScrollView 中 VStack 中元素的神秘间距或填充

ScrollView 的 SwiftUI 动画

水平 ScrollView (SwiftUI) 中的动画展开/折叠组

在 SwiftUI 中制作聊天应用程序:如何让 ScrollView 在键盘出现时保持原位?

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