在不影响外框的情况下使用 SwiftUI GeometryReader?

Posted

技术标签:

【中文标题】在不影响外框的情况下使用 SwiftUI GeometryReader?【英文标题】:Use SwiftUI GeometryReader without affecting outer frame? 【发布时间】:2019-06-10 10:03:31 【问题描述】:

是否可以使用GeometryReader 使其不仅仅填满父视图?

作为一个具体示例,我想使用.padding(.bottom, geometry.safeAreaInsets.bottom > 0 ? 0 : 12.0) 控制底部边距。这将使用安全区域作为 iPhone X 上的边距和旧设备上的自定义边距。

如果没有GeometryReader,我的视图会占用适合其实际垂直大小的空间。 对于阅读器,视图占据了屏幕的 1/2。

    VStack 
      Spacer()
      GeometryReader  proxy in // Lays out nicely without this...
        HStack 
          Text("Wrong")
          Spacer()
        .border(Color.gray, width: 1)
      

【问题讨论】:

【参考方案1】:

只需将 .fixedSize() 修饰符添加到您的 HStack 即可。这将达到预期的效果。

【讨论】:

fixedSize() 在该示例中有效,将fixedSize(horizontal:vertical:) 附加到我的GeometryReader 在我实际工作的View 中有效(嵌套了ZStacks)。【参考方案2】:

您也可以尝试将.aspectRatio(contentMode: .fit) 修饰符添加到GeometryReader

【讨论】:

以上是关于在不影响外框的情况下使用 SwiftUI GeometryReader?的主要内容,如果未能解决你的问题,请参考以下文章

如何防止 SwiftUI clipShape 影响子视图

SwiftUI 如何在不使用 List 的情况下从 @ObservedObject ViewModel 获取 Firebase 数据

在不使用导航链接的情况下获取 SwiftUI 列表中的选定项目

SwiftUI 缩放视图而不影响几何

如何在不中断删除的情况下在 SwiftUI 中实现 TextField 列表

如何在不使用数据框的情况下将一行分解为多行?