【问题标题】:Saving the current width of a NavigationSplitView sidebar in SwiftUI在 SwiftUI 中保存 NavigationSplitView 侧边栏的当前宽度
【发布时间】:2022-08-22 19:49:47
【问题描述】:

我正在做一个苹果系统使用新的 SwiftUI 应用程序NavigationSplitView.如果用户调整侧边栏的大小,我希望在下次加载应用程序时记住并恢复该新宽度。

可以像这样读取偏好...

@State private var width = UserDefaults.standard.float(forKey: \"sidebarWidth\")
...
NavigationSplitView {
...
}.navigationSplitViewColumnWidth(ideal: width)

但这不是绑定,因此宽度在更改时不会更新。

是否可以在更改时(或应用程序关闭时)保存当前的侧边栏宽度,以便以后恢复?

非常感谢!

  • 查看@SceneStorage
  • 谢谢,但我不确定这会有什么帮助。我需要以某种方式检索侧边栏的宽度——我知道一旦有了它就可以存储它。
  • 使用GeometryReader

标签: macos swiftui swiftui-navigationsplitview


【解决方案1】:

这是一个检索宽度的函数:

extension View {
    @ViewBuilder func onWidthChange(_ action: @escaping (CGFloat) -> Void) -> some View {
        self
            .background(
                GeometryReader { reader in
                    Color.clear
                        .onChange(of: reader.frame(in: .global).width) { newValue in
                            action(newValue)
                        }
                }
            )
    }
}

用法:

Text("Hi")
    .onWidthChange { newWidth in
        //save width
    }

【讨论】:

    猜你喜欢
    • 2023-01-15
    • 2023-03-30
    • 2013-10-16
    • 2016-12-23
    • 2020-10-26
    • 1970-01-01
    • 2017-12-06
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多