环境大小类未更新

Posted

技术标签:

【中文标题】环境大小类未更新【英文标题】:Environment size class not updated 【发布时间】:2020-03-11 02:52:49 【问题描述】:

我想使用尺寸类创建不同的布局,我遵循了这个例子:https://www.hackingwithswift.com/quick-start/swiftui/how-to-create-different-layouts-using-size-classes

我扩展了 Xcode Master/Detail 模板并将 ContentView 更改如下,使用两个尺寸类,然后使用水平尺寸类设置一个尺寸类依赖的导航标题。 问题是导航标题总是显示为“紧凑”。我在这里遗漏了什么?

struct ContentView: View 
    @Environment(\.managedObjectContext)
    var viewContext   

    @Environment(\.verticalSizeClass) var vSizeClass
    @Environment(\.horizontalSizeClass) var hSizeClass

    var body: some View 
        NavigationView 
            MasterView()
                .navigationBarTitle(Text(hSizeClass == .compact ? "Compact" : "Regular"))
                .navigationBarItems(
                    leading: EditButton(),
                    trailing: Button(
                        action: 
                            withAnimation  Event.create(in: self.viewContext) 
                        
                    )  
                        Image(systemName: "plus")
                    
                )
            Text("Detail view content goes here")
                .navigationBarTitle(Text("Detail"))
        .navigationViewStyle(DoubleColumnNavigationViewStyle())
    

【问题讨论】:

【参考方案1】:

我使用此代码进行了自己的测试,对您的代码进行了简化和稍微修改:

struct ContentView: View 
    @Environment(\.managedObjectContext)
    var viewContext

    @Environment(\.verticalSizeClass) var vSizeClass
    @Environment(\.horizontalSizeClass) var hSizeClass

    var body: some View 
        NavigationView 
            Form 
                Section 
                    Text("My Content")
                
            
            .navigationBarTitle(Text(hSizeClass == .compact ? "Compact" : "Regular"))
        
    

在模拟器中测试它会产生所需的结果:

iPhone 8 PlusCompact Width 在纵向模式下, 常规宽度横向模式

最初导航标题显示“紧凑”,但当手机旋转到横向时,标题会更新,显示“常规”。

只需确保您使用的设备或模拟器在某些方向上水平尺寸等级为常规

这里是关于这个主题的官方文档,正如 OP 的评论中提到的那样。它有一个方便的表格,根据型号和物理方向列出设备尺寸类别:

Apple Developer - Human Interface Guidelines: Adaptivity and Layout

祝你好运!

【讨论】:

非常感谢。我用 iPhone XS 进行了测试,不知何故我确信横向方向具有常规宽度......但它仍然是紧凑宽度。 Apple 显示了这些尺寸等级如何适用于不同设备和方向的详细表格:developer.apple.com/design/human-interface-guidelines/ios/… 很高兴听到!我应该自己链接到那张桌子。我将更新答案,使其作为参考更加明显。 所以根据developer.apple.com/design/human-interface-guidelines/ios/…,横向中的iPhone 12具有紧凑的宽度,紧凑的高度。 iPhone 12 在横向中具有紧凑宽度??我错过了什么吗? 这里有我之前评论的答案:***.com/questions/34986078/…

以上是关于环境大小类未更新的主要内容,如果未能解决你的问题,请参考以下文章

仅在运行单元测试时出现 OLE DB 异常“类未注册”

带有前向声明的循环包含和继承导致 C2504 基类未定义

Hazelcast 谓词/ SQL 查询类未找到

基类未定义,但包含其标头

类未确认协议 CBPeripheralManagerDelegate

基类未捕获 C++ 异常