小编Pet*_*ter的帖子

MacOS 中使用 SwiftUI 的多列 TableViews

我一直在尝试使用 SWiftUI,但似乎根本找不到任何关于如何使用 SWiftUI 创建多列 TableView 的信息,就像在 NSTableView 中一样。我设法找到的所有示例都显示了单列数据。Apple 的文档甚至指定 SwiftUI 列表结构用于数据行的单列显示。这是 MacOS 上应用程序的一个非常基本的数据结构,但似乎在任何地方都没有提到它!

有人可以对此有所了解吗?我想它只是还没有准备好,但仍然......

macos swiftui

28
推荐指数
2
解决办法
2824
查看次数

从另一个对象观察@Published var

我试图让一个对象监听另一个对象属性的变化。我让它工作如下所示,但我希望观察对象对模型一无所知,只知道属性。

\n
class Model : ObservableObject{\n    @Published var items: [Int] = []\n}\n\nclass ObjectUsingItems{\n    var itemObserver: AnyCancellable?\n    var items: [Int] = []\n    \n    func observeItems(model: Model){\n        itemObserver = model.$items\n            .sink{ newItems in\n                self.items = newItems\n                print("New Items")\n        }\n    }\n}\n
Run Code Online (Sandbox Code Playgroud)\n

目前我开始观察 model.items 如下 - 它有效:

\n
let model = Model()\nlet itemUser = ObjectUsingItems()\n        \nitemUser.observeItems(model: model)\nmodel.items.append(1) // itemUser sees changes\n
Run Code Online (Sandbox Code Playgroud)\n

不幸的是,我\xe2\x80\x99t似乎无法弄清楚observeItems方法的参数需要什么,这样它就可以在不了解模型的情况下工作 - 像这样:

\n
class ObjectUsingItems{\n    var itemObserver: AnyCancellable?\n    var items: [Int] = []\n    \n    func observeItems(propertyToObserve: WhatGoesHere?){\n        itemObserver = propertyToObserve\n …
Run Code Online (Sandbox Code Playgroud)

swift combine

5
推荐指数
1
解决办法
2839
查看次数

NSViewRepresentable 托管 NSScrollView 的绑定问题

我正在尝试制作一个简单的 SWiftUI ScrollView,我可以在其中通过绑定设置和获取 ScrollView 边界偏移的值。我有以下内容,它可以作为 ScrollView 编译并正常工作,但我无法实际设置和获取偏移量并将其传播回托管 ScrollView 的 ContentView。

我有以下内容:

struct MyScrollView<Content>: NSViewRepresentable where Content: View {
    private var content: Content
    let offset: Binding<CGFloat>
    
    
    init(offset: Binding<CGFloat>, @ViewBuilder content: () -> Content) {
        self.content = content()
        self.offset = offset
    }


    func makeNSView(context: NSViewRepresentableContext<MyScrollView>) ->TheScrollView {
        let view = TheScrollView(offset: offset)
        
        view.hasVerticalScroller = true
        view.hasHorizontalScroller = true
    
        let document = NSHostingView(rootView: content)
        document.translatesAutoresizingMaskIntoConstraints = false
        view.documentView = document
 
        return view
    }

    
    func updateNSView(_ view: TheScrollView, context: NSViewRepresentableContext<MyScrollView>) {
    }
    
}


class …
Run Code Online (Sandbox Code Playgroud)

swiftui

5
推荐指数
1
解决办法
382
查看次数

使用 2 个 HSplitView 在 swiftUI 中创建一个 3 窗格界面

这是针对 MacOS 的。我正在尝试制作一个相当标准的 3 窗格界面,就像您在 Xcode 和其他应用程序中看到的那样,在调整窗口大小时,中心视图具有优先权。两个侧视图可调整大小,但在调整窗口大小时应保持相同大小。我有以下示例,它可以执行我想要的操作,但是当我调整窗口大小时会出现奇怪的调整大小人工制品,但仅当我将窗口缩小时(实际上仅当它变窄时):

struct ContentView: View {
   var body: some View {
      GeometryReader{geometry in
         HSplitView(){
            Rectangle().foregroundColor(.red).frame(minWidth:200, idealWidth: 200, maxWidth: .infinity)//.layoutPriority(0)
            HSplitView(){
                Rectangle().foregroundColor(.black).frame(minWidth:200, idealWidth: geometry.size.width, maxWidth: .infinity).layoutPriority(1)
                Rectangle().foregroundColor(.green).frame(minWidth:200, idealWidth: 200, maxWidth: .infinity)
            }
         }.frame(width: geometry.size.width, height: geometry.size.height)
      }
   }
}
Run Code Online (Sandbox Code Playgroud)

当使窗口变窄时,左侧红色矩形似乎优先于中心矩形,导致红色矩形在两个宽度之间翻转时出现闪烁。我已经尝试了 layoutPriority 和其他一些东西,但问题仍然存在。对此的任何帮助将不胜感激。

macos swiftui

3
推荐指数
1
解决办法
1241
查看次数

SwiftUI 和 EmptyViews

我有以下代码示例:

struct ContentView: View {
    @State var showText = true

    var body: some View {
        VStack {
            if self.showText {
                Text("Hello")
            }
            //else {
            //      EmptyView()
            //  }
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

当它运行时,我得到的文本显示正常。但是,如果我将 showText 设置为 false,即使 VStack 不包含任何内容,它仍然可以正常编译和运行 - 它在运行时不显示任何内容。如果我取消注释 else 子句,该示例也会按预期运行。但是,如果我删除 VStack 的所有内容,则该示例将无法编译,因为没有返回任何内容。

所以我的问题是:

当 showText 为 false 时,当 VStack 中没有任何内容时,SwiftUI 是否会默默地添加一个 EmptyView ?

我真的应该添加 else 子句并返回一个 EmptyView 吗?

这个问题也不是完全学术性的,因为我有一个用例,我希望整个视图或多或少被“扔掉”,而不是层次结构中的 EmptyViews,尽管我目前对 SwiftUI 的理解非常有限,所以这可能无关紧要。

swiftui

1
推荐指数
1
解决办法
1439
查看次数

如何在 SwiftUI 中保存和恢复 HSplitview 位置

我希望能够保存和恢复 SwiftUI splitView 的位置,但我无法\xe2\x80\x99t 弄清楚如何做到这一点。我还没有找到任何示例,并且文档中没有任何信息。我有以下内容:

\n\n
struct ContentView: View {\n   var body: some View {\n      GeometryReader{geometry in\n         HSplitView(){\n            Rectangle().foregroundColor(.red).layoutPriority(1)\n            Rectangle().foregroundColor(.green).frame(minWidth:200, idealWidth: 200, maxWidth: .infinity)\n         }.frame(width: geometry.size.width, height: geometry.size.height)\n      }\n   }\n}\n
Run Code Online (Sandbox Code Playgroud)\n\n

有谁知道如何获取滑块的位置以便保存并在启动时恢复?\n谢谢!

\n

swiftui

1
推荐指数
1
解决办法
1212
查看次数

标签 统计

swiftui ×5

macos ×2

combine ×1

swift ×1