【发布时间】:2020-07-02 18:18:01
【问题描述】:
我在详细视图中有一个不会消失的额外空间。该视图来自 NavigationLink,但我尝试过使用或不使用 NavigationView。我试图用 NavigationView 替换 ScrollView 来包装它,但这没有用。我认为很多 Swift 编码人员都遇到过这个问题,并且没有适合我的正确答案。
这是我的详细视图
struct DetailView: View {
var body: some View {
ScrollView {
VStack(alignment: .leading) {
Text("Huge Font Recipe Title")
.font(.system(size: 48, weight: .bold))
.foregroundColor(.black)
.padding([.leading, .top, .trailing])
VStack {
Image("img1")
.resizable()
.frame(width: 375, height: 375)
.aspectRatio(contentMode: .fit)
.frame(width: UIScreen.main.bounds.width)
Spacer()
}.padding(.bottom)
}
}
}
}
struct DetailView_Previews: PreviewProvider {
static var previews: some View {
DetailView()
}
}
这是包含 NavigationView 的父视图(内容视图)
import SwiftUI
struct ContentView: View {
var body: some View {
NavigationView {
ScrollView (showsIndicators: false) {
VStack(spacing: 20) {
ForEach(recipecardData) { item in
NavigationLink(
destination: DetailView()) {
RecipeCards( card: item)
}
}
}
}
.navigationBarTitle("Navigation")
}
}
}
struct RecipeCards: View {
var card: RecipeCard
var body: some View {
ZStack {
Image(card.imageName)
.resizable()
.aspectRatio(contentMode: .fit)
.frame(width: 334, height: 335)
.cornerRadius(10)
.padding()
.shadow(radius: 16)
Rectangle()
.foregroundColor(.clear)
.background(LinearGradient(gradient: Gradient(colors: [.red, .blue]), startPoint: .bottom, endPoint: .top)
)
.frame(width: 334, height: 335)
.cornerRadius(10)
HStack {
Text(card.title)
.font(.system(size: 27,weight: .bold))
.foregroundColor(.white)
.frame(minWidth: 10, maxWidth: .infinity, alignment: .leading)
.lineLimit(2)
.padding(EdgeInsets(top: 0, leading: 0, bottom: 0, trailing: 20))
}
.padding(.bottom, 268)
.padding(EdgeInsets(top: 0, leading: 34, bottom: 0, trailing: 8))
}
}
}
struct RecipeCard: Identifiable {
var id = UUID()
var title: String
var imageName: String
}
let recipecardData = [
RecipeCard(title: "Title 1", imageName: "img1"),
RecipeCard(title: "Title 2", imageName: "img2")
]
struct ContentView_Previews: PreviewProvider {
static var previews: some View {
ContentView()
}
}
【问题讨论】:
-
用上面的代码很难复制这个问题。您的 ParentView 中的 RecipeDetail() 在哪里?什么是 TabBarView()?
-
@pawello2222 这是我在这里的第一个问题,请原谅糟糕的文档。我修复了上面的代码。现在应该可以工作了。
-
@davidev 我有多个视图,包括包含 TabBar 和 RecipeList 的 TabBarView。但是我简化了上面的代码,你现在应该可以运行它并看到问题了。谢谢你的帮助。