看看推送的视图有一个空的大标题,在动画完成后消失(视频在模拟器上拍摄,在设备上也会发生同样的情况):
这是 SwiftUI 教程(HandlingUserInput 项目)中的 Apple 示例项目,它没有变化。这是一些代码:
// Parent view
struct LandmarksView: View {
var body: some View {
NavigationSplitView {
List {
ForEach(filteredLandmarks) { landmark in
NavigationLink {
LandmarkDetail(landmark: landmark)
} label: {
LandmarkRow(landmark: landmark)
}
}
}
.navigationTitle("Landmarks") // <----- Parent title
.navigationBarTitleDisplayMode(.large) // <----- Large style
} detail: {
Text("Select a Landmark")
}
}
}
// Child view
struct LandmarkDetail: View {
var body: some View {
ScrollView { // <--- The actual container and its content doesn't matter
// ...
}
.navigationTitle(landmark.name) // <--- Child title
.navigationBarTitleDisplayMode(.inline) // <--- The inline style
}
}
我在互联网上搜索并发现了它要么是Apple bug要么是Apple不打算将导航控制器从大到内联使用所以你总是使用大或内联,但不能同时使用两者。
有人可以解释一下它到底是什么以及是否有解决方法?
我最近遇到了类似的问题,并通过使用相同的孩子们的
TitleDisplayMode
来解决 detail
争论。应用于您的示例,这将变为以下内容。 (使用您提到的 HandlingUserInput 教程检查代码。)
// Parent view
struct LandmarksView: View {
var body: some View {
NavigationSplitView {
List {
ForEach(filteredLandmarks) { landmark in
NavigationLink {
LandmarkDetail(landmark: landmark)
} label: {
LandmarkRow(landmark: landmark)
}
}
}
.navigationTitle("Landmarks")
.navigationBarTitleDisplayMode(.large)
} detail: {
Text("Select a Landmark")
.navigationBarTitleDisplayMode(.inline) // <---— Line added
}
}
}
看起来
NavigationSplitView
使用
TitleDisplayMode
内部内容的 detail: { }
来预测如何过渡到实际的导航目的地。仍然存在的一个错误是,如果地标名称很长(例如,Silver Salmon Creek),后退按钮最初会显示“地标”,并且只有在显示 LandmarkDetail
视图时才会被剪辑为“后退”。似乎
NavigationSplitView
无法像 NavigationStack
那样预测工具栏的间距。 此问题中也报告了此行为。