如何在启动时显示 NavigationView (SwiftUI) 的详细视图
Posted
技术标签:
【中文标题】如何在启动时显示 NavigationView (SwiftUI) 的详细视图【英文标题】:How to display a detailed view on startup for a NavigationView (SwiftUI) 【发布时间】:2021-10-03 14:20:26 【问题描述】:This tutorial 使用NavigationView
显示可以单击的元素的List
,从而导致详细视图LandmarkDetail
。在 iPhone 上,UI 使用 StackNavigationViewStyle()
,它看起来和工作正常,但在 iPad 上,NavigationView
显示在侧面。我希望能够用详细视图填充剩余空间(见下文)。
我尝试在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 开发。
【问题讨论】:
即使在iPhone上,在横屏模式下有足够大的屏幕,相信你也会得到iPad风格的列表和详细视图同时显示的系统。因此,您可能想要检查尺寸等级并仅在尺寸等级足够大时有条件地显示LandmarkDetail
。可能有更好的解决方案,但这就是我立即想到的。
您能提供一种检查方法吗?我尝试过使用 Size Classes,但没有运气。
hackingwithswift.com/quick-start/swiftui/…
很遗憾,结果相同,但感谢您的帮助。
【参考方案1】:
根据目标设备创建以编程方式分配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()
我希望这对遇到类似问题的人有所帮助。
【讨论】:
以上是关于如何在启动时显示 NavigationView (SwiftUI) 的详细视图的主要内容,如果未能解决你的问题,请参考以下文章