微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

SwiftUI 内容在较小的 iPhone 屏幕上被切断 使用堆栈时的提示

如何解决SwiftUI 内容在较小的 iPhone 屏幕上被切断 使用堆栈时的提示

我是 SwiftUI 的新手,所以我正在按照教程来熟悉它。但是,我的应用程序的内容在较小的屏幕上(垂直和水平)被截断了。我怎样才能防止这种情况发生?

这是我的代码

编辑:我在我的图片周围添加了边框并按照您的评论和答案中的建议调整了图片的大小,但正如您所看到的,这些图片似乎没有占用更多空间比他们应该的。

struct ContentView: View {
  var body: some View {
    ZStack {
      Image("background").ignoresSafeArea(.all)
      vstack {
        Spacer()
        Image("logo")
          .resizable()
          .aspectRatio(contentMode: .fit)
          .frame(width: 100)
          .border(Color.black)
        Spacer()
        HStack {
          Spacer()
          Image("card3").border(Color.black,width: 3)
          Spacer()
          Image("card4").border(Color.black,width: 3)
          Spacer()
        }
        Spacer()
        Image("dealbutton")
          .resizable()
          .aspectRatio(contentMode: .fit)
          .frame(width: 100)
          .border(Color.black)
        Spacer()
        HStack {
          Spacer()
          vstack {
            Text("Player").padding(.bottom,10)
            Text("0").font(.largeTitle)
          }
          Spacer()
          vstack {
            Text("cpu").padding(.bottom,10)
            Text("0").font(.largeTitle)
          }
          Spacer()
        }
        .foregroundColor(.white)
        Spacer()
      }
    }
  }
}

以下是 iPod touch 上的预览效果

iPod Touch Preview

解决方法

尝试使 Image("background") 可调整大小或将其设置为 ZStack 的 .background(:)。目前背景图像不可调整大小并且比屏幕大,因此它以其原始大小显示并且将其父 ZStack 拉伸到屏幕边界之外。由于您的内容在同一个 ZStack 中,因此它也超出了屏幕范围

,

您的问题与您在视图结构本身上显示的图像有关。图像以 100% 的大小呈现,而不管它们的限制。这将导致其他视图被推开。解决方案是在视图本身上设置一个与可用空间范围相匹配的大小。此外,您正在调整 ZStack 的大小,这也会调整 ZStack 内的内容的大小。例如。

Image("logo")
    .resizeable()
    .aspectRatio(contentMode: .fit)
    .frame(width: 100)

像这样处理您的图像将确保在渲染时将其设置为适当的大小。然后,您可以按照预期的方式将剩余的视图放置到位。如果您需要按屏幕尺寸按 % 缩放,您可以使用 GeometryReader 为不同屏幕尺寸缩放视图。

GeometryReader { reader in 
    Image("logo")
        .resizeable()
        .aspectRatio(contentMode: .fit)
        .frame(width: reader.size.width * 0.2)
}

最后,删除您的 ZStack 并像这样设置。

VStack {
    //Your Content
}.background(
      //Make sure to set the edgesIgnoring.. on this NOT the VStack
      Image("background").edgesIgnoringSafeArea(.all)
  )

使用堆栈时的提示

堆栈,无论是 VStack、HStack 还是 ZStack 的所有框架都始终设置为保存在其中的内容。如果您有一个宽度为 100 和高度为 10,000 的对象,那么堆栈也将具有这些尺寸,除非另外使用 Modifier(例如 .frame(width...))指定,或者甚至在您的情况下,图像已调整大小。

假设您的同一个堆栈然后添加了一个 width: 10,height: 10 视图,它仍然会保留与其中包含的最大内容相同的大小。这当然与 HStack 和 VStacks 的处理方式不同,因为它们实际上在 2D 平面上堆叠东西,而 ZStack 在 3D 平面上工作。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其他元素将获得点击?
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。)
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbcDriver发生异常。为什么?
这是用Java进行XML解析的最佳库。
Java的PriorityQueue的内置迭代器不会以任何特定顺序遍历数据结构。为什么?
如何在Java中聆听按键时移动图像。
Java“Program to an interface”。这是什么意思?