我正在尝试使用SwiftUI在iOS上使用边栏和详细视图构建一个非常简单的布局。但是,似乎不可能在iPad的详细信息视图中拥有较大的标题。它实际上应该看起来像Apple的Reminders应用程序。
但是,在我自己的应用程序中,它不起作用。我发现苹果公司的这个例子涉及建立列表和导航:https://developer.apple.com/tutorials/swiftui/building-lists-and-navigation
但是它在那里也不起作用。即使我这样在LandmarkDetail.swift
中设置标题,也是如此:
VStack {
MapView(coordinate: landmark.locationCoordinate)
.frame(height: 300)
CircleImage(image: landmark.image)
.offset(x: 0, y: -130)
.padding(.bottom, -130)
VStack(alignment: .leading) {
Text(landmark.name)
.font(.title)
HStack(alignment: .top) {
Text(landmark.park)
.font(.subheadline)
Spacer()
Text(landmark.state)
.font(.subheadline)
}
}
.padding()
Spacer()
}
.navigationBarTitle(Text(verbatim: landmark.name), displayMode: .large)
我在iPhone上对其进行了测试,并且可以正常工作。我还添加了另一个NavigationView
细节,但这只会使整个情况变得更糟。我的标题很大,但是标题出现在另一个导航栏的下方,因此顶部有很大的空白。
答案 0 :(得分:1)
我确实尝试了一种类似的方法来将大标题保留在拆分视图的两侧,但是失败了。因此,我想您可以尝试在右侧添加自定义视图。您可以在HStack中添加NavigationView并可以安排如下的视图
这是代码
var body: some View {
HStack{
NavigationView {
List(landmarkData) { landmark in
NavigationLink(destination: LandmarkDetail(landmark: landmark)) {
LandmarkRow(landmark: landmark)
}.isDetailLink(false)
}
.navigationBarTitle(Text("Landmarks"), displayMode: .large)
}
NavigationView {
List(landmarkData) { landmark in
NavigationLink(destination: LandmarkDetail(landmark: landmark)) {
LandmarkRow(landmark: landmark)
}.isDetailLink(false)
}
.navigationBarTitle(Text("Landmarks"), displayMode: .large)
}
NavigationView {
LandmarkDetail(landmark: landmarkData[0])
.navigationBarTitle(Text("Landmarks"), displayMode: .large)
}
}
}
注意:目前,iPad的两面都不支持大标题。
答案 1 :(得分:0)
使用Xcode 11.1,该问题似乎已解决。我曾就此问题与苹果公司联系。他们说我应该报告现在不再需要的错误。
我使用了以下代码:
NavigationView {
VStack {
MapView(coordinate: landmark.locationCoordinate)
.frame(height: 300)
CircleImage(image: landmark.image)
.offset(x: 0, y: -130)
.padding(.bottom, -130)
VStack(alignment: .leading) {
Text(landmark.name)
.font(.title)
HStack(alignment: .top) {
Text(landmark.park)
.font(.subheadline)
Spacer()
Text(landmark.state)
.font(.subheadline)
}
}
.padding()
Spacer()
}
.navigationBarTitle(Text(verbatim: landmark.name), displayMode: .large)
}
.navigationBarTitle("")
.navigationBarHidden(true)
.navigationViewStyle(StackNavigationViewStyle())
在详细信息屏幕周围添加NavigationView
本身非常重要。否则,大标题将不起作用。如此一来,您最终将获得两个导航栏和一个很大的空白。
但是,当您在导航视图本身上使用.navigationBarHidden(true)
和{非常重要!!).navigationBarTitle("")
时,似乎会隐藏第一个导航栏,最终会导致布局变大细节视图中的标题,没有任何额外的边距或奇怪的行为。
其他信息:了解这些规则在何处存在区别是非常重要的。当您在NavigationView
的内部内部调用导航栏修饰符时,它将应用该导航视图的导航栏规则。但是,当您直接在导航视图上调用它时(就像我对上面的hide和empty标题所做的那样),那么这些修饰符将定位到下一个外部导航栏。
编辑:似乎需要将.navigationViewStyle(StackNavigationViewStyle())
添加到内部导航视图中,例如Xcode 11.2 /最新的iPadOS版本。我已经在上面的代码中添加了它。