swiftui - SwiftUI NavigationView 和 NavigationLink 更改自定义视图的布局
问题描述
我有一个 DetailView(),它显示图像、文本,然后是显示图像位置的地图。在我的 ContentView() 中,我有一个 NavigationView 和 NavigationLink 可以从主视图转到我的自定义视图。一切正常,除了当我查看 DetailView() 的预览时,我的 DetailView() 的对齐方式没有正确对齐。文字描述显示在图片下方。我已经拉了两天的头发试图弄清楚这一点,但到目前为止还没有。
struct ContentView: View {
var body: some View {
NavigationView {
NavigationLink(destination: DetailView(picture: "dunnottar-castle")) {
Text("Hello, World!")
Image(systemName: "sun.min.fill")
} .buttonStyle(PlainButtonStyle())
.navigationBarHidden(true)
}
}
}
=================== 我的DetailView()
struct MapView: UIViewRepresentable {
// 1.
func makeUIView(context: UIViewRepresentableContext<MapView>) -> MKMapView {
MKMapView(frame: .zero)
}
// 2.
func updateUIView(_ uiView: MKMapView, context: UIViewRepresentableContext<MapView>) {
// 3.
let location = CLLocationCoordinate2D(latitude: 30.478340,
longitude: -90.037687)
// 4.
let span = MKCoordinateSpan(latitudeDelta: 0.05, longitudeDelta: 0.05)
let region = MKCoordinateRegion(center: location, span: span)
uiView.setRegion(region, animated: true)
// 5.
let annotation = MKPointAnnotation()
annotation.coordinate = location
annotation.title = "Abita Springs"
annotation.subtitle = "Louisiana"
uiView.addAnnotation(annotation)
}
}
struct DetailView: View {
let picture: String
var body: some View {
VStack(spacing: -50.0){
// Picture and Title
ZStack (alignment: .bottom) {
//Image
Image(picture)
.resizable()
.aspectRatio(contentMode: .fit)
Rectangle()
.frame(height: 80)
.opacity(0.25)
.blur(radius: 10)
HStack {
VStack(alignment: .leading, spacing: 8.0) {
Text("EDINBURGH")
.foregroundColor(.yellow)
.font(.largeTitle)
}
.padding(.leading)
.padding(.bottom)
Spacer()
}
}.edgesIgnoringSafeArea(.top)
VStack{
// Description
Text("Edinburgh is Scotland's compact, hilly capital. It has a medieval Old Town and elegant Georgian New Town with gardens and neoclassical buildings. Looming over the city is Edinburgh Castle, home to Scotland’s crown jewels and the Stone of Destiny, used in the coronation of Scottish rulers. Arthur’s Seat is an imposing peak in Holyrood Park with sweeping views, and Calton Hill is topped with monuments and memorials.")
.font(.body)
.lineLimit(9)
.lineSpacing(5.0)
.padding()
// .frame(maxHeight: 310)
}
Spacer()
// Map of location
VStack {
MapView()
.edgesIgnoringSafeArea(.all)
.padding(.top)
.frame(maxHeight: 310)
// Image(systemName: "person")
.padding(.top)
}
}
}
}
解决方案
如果您只想拥有正常的布局,您还可以使用:
NavigationLink(destination: DetailView(picture: "dunnottar castle").navigationBarHidden(true))
推荐阅读
- python - 如何使用两个系列作为输入应用函数,输出是每个参数组合的函数结果的 DataFrame?
- java - 在 Java Spring Boot 中在运行时更改 @Bean 的值
- react-native - 错误意外标识符“从'react'导入反应;” 在本机反应
- python - django disabled Booleanfield 未在 POST 方法上提交
- c - 为什么会发生堆损坏?
- java - 同步部署在不同服务器上的批处理应用程序仅由一台服务器处理文件
- angular - Angular-cli 8 - 是否可以仅在 es2015 上构建?
- reactjs - 有没有办法用不同的主要元素声明样式化的组件?
- jquery - jQuery 表生成器是未附加标记
- c# - 设计多个表使用相同模型的 SQL 数据库