我有这个视图可以在多行上显示文本标签,这些标签是我从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) 使用 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)
不考虑代码大小,是否有一个明显的目的,必须使用一个而不是另一个?
我有一个 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) 我有以下观点:
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 内容对齐?
我有一个这样的 Zstack:
ZStack {
Image("beach")
.resizable()
.edgesIgnoringSafeArea(.all)
.scaledToFill()
VStack {
// with a lot of stuff
}
}
Run Code Online (Sandbox Code Playgroud)
我希望图像忽略安全区域,但Vstack必须尊重安全区域。
该图像是应覆盖所有区域的背景图像。
我的这段代码也在VStack全屏显示,我不想要那样。
为什么一切都不尊重安全区域是个谜,因为相应的修饰符仅应用于图像。
我需要能够查看我的 SwiftUI 视图以及呈现它们的 UIHosting 控制器,以便看到它们下面的背景图像。下面的代码仍然在我的 SwiftUI 视图下显示一个白色矩形。Paul Hudson说要使用 edgeIgnoringSafeArea 但我不能使用它,因为我的 SwiftUIView 嵌入在更大的 UI 方案中。有什么办法可以使我看到的这个白色矩形清晰?
var body: some View {
ZStack {
VStack {
//omitted
}
}.background(Color.clear)
}
Run Code Online (Sandbox Code Playgroud) 我有一个位于 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)