我一直在尝试使用 SWiftUI,但似乎根本找不到任何关于如何使用 SWiftUI 创建多列 TableView 的信息,就像在 NSTableView 中一样。我设法找到的所有示例都显示了单列数据。Apple 的文档甚至指定 SwiftUI 列表结构用于数据行的单列显示。这是 MacOS 上应用程序的一个非常基本的数据结构,但似乎在任何地方都没有提到它!
有人可以对此有所了解吗?我想它只是还没有准备好,但仍然......
我试图让一个对象监听另一个对象属性的变化。我让它工作如下所示,但我希望观察对象对模型一无所知,只知道属性。
\nclass 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}\nRun Code Online (Sandbox Code Playgroud)\n目前我开始观察 model.items 如下 - 它有效:
\nlet model = Model()\nlet itemUser = ObjectUsingItems()\n \nitemUser.observeItems(model: model)\nmodel.items.append(1) // itemUser sees changes\nRun Code Online (Sandbox Code Playgroud)\n不幸的是,我\xe2\x80\x99t似乎无法弄清楚observeItems方法的参数需要什么,这样它就可以在不了解模型的情况下工作 - 像这样:
\nclass 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) 我正在尝试制作一个简单的 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) 这是针对 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 和其他一些东西,但问题仍然存在。对此的任何帮助将不胜感激。
我有以下代码示例:
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 splitView 的位置,但我无法\xe2\x80\x99t 弄清楚如何做到这一点。我还没有找到任何示例,并且文档中没有任何信息。我有以下内容:
\n\nstruct 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}\nRun Code Online (Sandbox Code Playgroud)\n\n有谁知道如何获取滑块的位置以便保存并在启动时恢复?\n谢谢!
\n