标签: zstack

具有环绕和动态高度的 SwiftUI HStack

我有这个视图可以在多行上显示文本标签,这些标签是我从SwiftUI HStack with Wrap 获得的,但是当我将它添加到 VStack 中时,标签会与我放在下面的任何其他视图重叠。标签显示正确,但视图本身的高度不在 VStack 内计算。如何使此视图使用内容的高度?

import SwiftUI

struct TestWrappedLayout: View {
    @State var platforms = ["Ninetendo", "XBox", "PlayStation", "PlayStation 2", "PlayStation 3", "PlayStation 4"]

    var body: some View {
        GeometryReader { geometry in
            self.generateContent(in: geometry)
        }
    }

    private func generateContent(in g: GeometryProxy) -> some View {
        var width = CGFloat.zero
        var height = CGFloat.zero

        return ZStack(alignment: .topLeading) {
            ForEach(self.platforms, id: \.self) { platform in
                self.item(for: platform)
                    .padding([.horizontal, .vertical], 4)
                    .alignmentGuide(.leading, computeValue: { d in …
Run Code Online (Sandbox Code Playgroud)

xcode word-wrap swift swiftui zstack

21
推荐指数
4
解决办法
1万
查看次数

ZStack 或使用 .overlay() 之间的区别

使用 aZStack和使用.overlay()修饰符有什么区别。

苹果 说:

ZStack = "覆盖其子项的视图,将它们在两个轴上对齐。"

.overlay = "在此视图前面分层一个辅助视图。"

一些例子:

ZStack(alignment: .bottom) {
    Image(systemName: "folder")
        .font(.system(size: 55, weight: .thin))
    Text("??")
}
Run Code Online (Sandbox Code Playgroud)
Image(systemName: "folder")
    .font(.system(size: 55, weight: .thin))
    .overlay(Text("??"), alignment: .bottom)
Run Code Online (Sandbox Code Playgroud)

不考虑代码大小,是否有一个明显的目的,必须使用一个而不是另一个?

overlay swiftui zstack

15
推荐指数
1
解决办法
2830
查看次数

在 swiftUI 中的导航视图之上呈现一个视图

我有一个 MainView,它是一个导航视图,它通过 NavigationLink 呈现一个视图,即此处的子视图。在子视图中,我想在按钮切换上的子视图顶部呈现一个视图,同时隐藏导航栏和子视图内容。我尝试使用 ZStack,但它似乎没有隐藏导航栏,因为它仍然是导航堆栈的一部分。还有其他方法可以实现这一目标吗?

代码如下:

struct MainView: View {
    var body: some View {
        NavigationView {
            List {
                NavigationLink(destination: SubView()) {
                    Text("Go to Another View")
                }
            }
        }
    }
}

struct SubView : View {
    @State private var showTopSheet: Bool = false
    var body: some View {
        ZStack {
            Text("Content goes here")
            if showTopSheet {
                TopSheet(showTopSheet: $showTopSheet).transition(.move(edge: .top))
            }
        }.navigationBarTitle("SubView")
            .navigationBarBackButtonHidden(true)
            .navigationBarItems(trailing: Button(action: {
                self.showTopSheet.toggle()
            }) {
                Image(systemName: "folder.circle")
            })
    }
}

struct TopSheet: View {
    @Binding var showTopSheet: …
Run Code Online (Sandbox Code Playgroud)

ios navigationview swiftui zstack

6
推荐指数
0
解决办法
4348
查看次数

在 GeometryReader 中 ZStack 对齐不居中?

我有以下观点:

struct TestView: View {
    
    var body: some View {
        GeometryReader { geo in
            ZStack(alignment: Alignment(horizontal: .center, vertical: .center)) {
                                
                    Text("TEST TEXT")
                
            }.background(Color.red)
        }
    }
    
}
Run Code Online (Sandbox Code Playgroud)

呈现这个:

在此输入图像描述

我希望 ZStack 中的视图居中,并且只有在删除 时才有效GeometryReader,如下所示:

struct TestView: View {
    
    var body: some View {
        ZStack(alignment: Alignment(horizontal: .center, vertical: .center)) {
            
            Text("TEST TEXT")
            
        }.background(Color.red)
    }
    
}
Run Code Online (Sandbox Code Playgroud)

呈现这个:

在此输入图像描述

如何使用GeometryReaderZStack 并仍然使内容居中,如上面最后一个渲染图片所示?为什么 GeometryReader 会扰乱 ZStack 内容对齐?

swiftui geometryreader zstack

5
推荐指数
1
解决办法
1319
查看次数

SwiftUI Zstack - 使元素忽略安全区域而另一个不

我有一个这样的 Zstack:

ZStack {
  Image("beach")
    .resizable()
    .edgesIgnoringSafeArea(.all)
    .scaledToFill()

  VStack {
    // with a lot of stuff
  }
}
Run Code Online (Sandbox Code Playgroud)

我希望图像忽略安全区域,但Vstack必须尊重安全区域。

该图像是应覆盖所有区域的背景图像。

我的这段代码也在VStack全屏显示,我不想要那样。

为什么一切都不尊重安全区域是个谜,因为相应的修饰符仅应用于图像。

swift swiftui vstack zstack

4
推荐指数
3
解决办法
792
查看次数

如何将 UIHostingController 的背景颜色设置为清除?

我需要能够查看我的 SwiftUI 视图以及呈现它们的 UIHosting 控制器,以便看到它们下面的背景图像。下面的代码仍然在我的 SwiftUI 视图下显示一个白色矩形。Paul Hudson要使用 edgeIgnoringSafeArea 但我不能使用它,因为我的 SwiftUIView 嵌入在更大的 UI 方案中。有什么办法可以使我看到的这个白色矩形清晰?

    var body: some View {
          ZStack {
            VStack {
                 //omitted
              }
        }.background(Color.clear)
   }
Run Code Online (Sandbox Code Playgroud)

ios swift swiftui uihostingcontroller zstack

2
推荐指数
1
解决办法
908
查看次数

SwiftUI - 使用 .easeInOut 为 ZStack 中的视图不透明度设置动画

我有一个位于 mapView 顶部的视图(在 ZStack 中),并且希望能够通过将.easeInOut动画修改器应用于视图的不透明度来淡入和淡出绿色的上视图。正如您在 gif 中看到的那样,它很好地淡入但突然消失了。

在此处输入图片说明

如果我删除 mapView 那么一切都很好。如果我用一个简单的替换 mapViewRectangle()那么问题又回来了,所以我相信它与 ZStack 而不是地图有关。有趣的是,我实际上使用的是 Mapbox 而不是 MapKit(为了简单起见,如下面的代码所示)并且淡入淡出/突然消失的行为被逆转了。

import SwiftUI
import MapKit

struct ContentView: View {
    @State private var show = false

    var body: some View {
        VStack {
            ZStack {
                MapView()
                if show {
                    LabelView()
                        .transition(AnyTransition.opacity.animation(.easeInOut(duration: 1.0)))
                }
            }
            Button("Animate") {
                self.show.toggle()
            }.padding(20)
        }
    }
}

struct MapView: UIViewRepresentable {
    func makeUIView(context: Context) -> MKMapView {
        let mapView = MKMapView()
        mapView.mapType = .standard
        return mapView
    }

    func …
Run Code Online (Sandbox Code Playgroud)

animation opacity swiftui zstack easeinout

-2
推荐指数
1
解决办法
1711
查看次数