如何在 NavigationView (SwiftUI) 启动时显示详细视图
How to display a detailed view on startup for a NavigationView (SwiftUI)
This tutorial 使用 NavigationView
显示 List
个可以单击的元素,从而进入详细视图 LandmarkDetail
。在 iPhone 上,UI 使用看起来和工作正常的 StackNavigationViewStyle()
,但在 iPad 上,NavigationView
显示在侧面。我希望能够用详细视图(见下文)填充剩余的 space。
我尝试在 NavigationView
旁边显示详细视图 LandmarkDetail
,如下所示:
var body: some View {
NavigationView {
List {
Toggle(isOn: $showFavoritesOnly) {
Text("Favorites only")
}
ForEach(filteredLandmarks) { landmark in
NavigationLink(destination: LandmarkDetail(landmark: landmark)) {
LandmarkRow(landmark: landmark)
}
}
}
.navigationTitle("Landmarks")
LandmarkDetail(landmark: ModelData().landmarks[0])
}
}
此方法适用于 iPad,但在 iPhone 上会产生意想不到的结果(重叠图块等)(见下文)。有没有更好的方法来达到我想要的结果?
感谢您的帮助,对于潜在的明显错误等,我深表歉意。这是我第一次使用 SwiftUI,可用资源明显少于 Android 开发。
创建一个修饰符,根据目标设备以编程方式分配 NavigationView
样式修复了这个问题。
extension View
{
func navigationStyleModification() -> some View
{
if UIDevice.current.userInterfaceIdiom == .phone
{
return AnyView(self.navigationViewStyle(StackNavigationViewStyle()))
} else
{
return AnyView(self.navigationViewStyle(DefaultNavigationViewStyle()))
}
}
}
修饰符可以通过以下方式调用:
NavigationView
{
...
}.navigationStyleModification()
我希望这对遇到类似问题的人有所帮助。
This tutorial 使用 NavigationView
显示 List
个可以单击的元素,从而进入详细视图 LandmarkDetail
。在 iPhone 上,UI 使用看起来和工作正常的 StackNavigationViewStyle()
,但在 iPad 上,NavigationView
显示在侧面。我希望能够用详细视图(见下文)填充剩余的 space。
我尝试在 NavigationView
旁边显示详细视图 LandmarkDetail
,如下所示:
var body: some View {
NavigationView {
List {
Toggle(isOn: $showFavoritesOnly) {
Text("Favorites only")
}
ForEach(filteredLandmarks) { landmark in
NavigationLink(destination: LandmarkDetail(landmark: landmark)) {
LandmarkRow(landmark: landmark)
}
}
}
.navigationTitle("Landmarks")
LandmarkDetail(landmark: ModelData().landmarks[0])
}
}
此方法适用于 iPad,但在 iPhone 上会产生意想不到的结果(重叠图块等)(见下文)。有没有更好的方法来达到我想要的结果?
感谢您的帮助,对于潜在的明显错误等,我深表歉意。这是我第一次使用 SwiftUI,可用资源明显少于 Android 开发。
创建一个修饰符,根据目标设备以编程方式分配 NavigationView
样式修复了这个问题。
extension View
{
func navigationStyleModification() -> some View
{
if UIDevice.current.userInterfaceIdiom == .phone
{
return AnyView(self.navigationViewStyle(StackNavigationViewStyle()))
} else
{
return AnyView(self.navigationViewStyle(DefaultNavigationViewStyle()))
}
}
}
修饰符可以通过以下方式调用:
NavigationView
{
...
}.navigationStyleModification()
我希望这对遇到类似问题的人有所帮助。