【问题标题】: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())
    }
}

【问题讨论】:

    标签: swift swiftui


    【解决方案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

    祝你好运!

    【讨论】:

    猜你喜欢
    • 2020-06-06
    • 1970-01-01
    • 1970-01-01
    • 2016-02-15
    • 2020-05-04
    • 1970-01-01
    • 2021-12-01
    • 1970-01-01
    • 2021-03-26
    相关资源
    最近更新 更多