Swiftui richten benutzerdefinierte Unteransicht aus
Posted: 11 Mar 2025, 22:47
Ich habe den folgenden Swiftui -Code, in dem ich eine 16: 9 -Kamera -Vorschau im Landschaftsmodus und 9:16 -Vorschau im Porträtmodus präsentieren möchte. Ich möchte auch eine benutzerdefinierte Ausrichtung für die Subviews wie folgt:
Die Kamera-Vorschau (prototypisiert wie color.Blue In dem folgenden Code, um an der Vorderkante der sicheren Flächeneinsätze ausgerichtet zu werden (+/- wenige Punkte, wenn ich mich wünscht. Vstack/hstack Überlagerungsrahmen, um mit der Kamera -Vorschau auszurichten und zu übereinstimmen. Ich habe versucht, die Größe der beiden Ansichten mit OnGeOmetryChange zu holen, aber ich scheine eine falsche Größe für die Oberseite zu erhalten () anzeigen es scheint. Die zurückgegebene Größe wird transponiert. < /P>
Die Kamera-Vorschau (prototypisiert wie color.Blue In dem folgenden Code, um an der Vorderkante der sicheren Flächeneinsätze ausgerichtet zu werden (+/- wenige Punkte, wenn ich mich wünscht. Vstack/hstack Überlagerungsrahmen, um mit der Kamera -Vorschau auszurichten und zu übereinstimmen. Ich habe versucht, die Größe der beiden Ansichten mit OnGeOmetryChange zu holen, aber ich scheine eine falsche Größe für die Oberseite zu erhalten (
Code: Select all
Color.clear
Code: Select all
struct CameraUI: View {
@Environment(\.verticalSizeClass) var verticalSizeClass
@Environment(\.horizontalSizeClass) var horizontalSizeClass
@State var cameraViewSize:CGSize = CGSize.zero
@State var viewSize:CGSize = CGSize.zero
var body: some View {
Color.clear
.ignoresSafeArea()
.onGeometryChange(for: CGSize.self) { proxy in
proxy.size
} action: { newValue in
viewSize = newValue
}
.background {
Color.blue
.ignoresSafeArea()
.aspectRatio(verticalSizeClass == .regular ? 9.0/16.0 : 16.0/9.0, contentMode: .fit)
.offset(x:verticalSizeClass == .compact ? -(viewSize.width - cameraViewSize.width)/2 : 0)
//Need to inset with leading edge of Safe Area
.onGeometryChange(for: CGSize.self) { proxy in
proxy.size
} action: { newValue in
cameraViewSize = newValue
print("View size \(viewSize.width), Camera View size \(cameraViewSize.width)")
}
}
.persistentSystemOverlays(.hidden)
.overlay {
/* Need to have this VStack/HStack aligned with the Color.blue view */
VStack {
Spacer()
HStack {
Button("Button1") {
}
Spacer()
Button("Button2") {
}
}
}
}
}
}
#Preview {
CameraUI()
}