gpt4 book ai didi

macos - 更新 NSWindow 内容大小以适应 SwiftUI View

转载 作者:行者123 更新时间:2023-12-04 08:35:10 31 4
gpt4 key购买 nike

我有一个不知道大小的 SwiftUI View ,因为字符串长度可变(例如,由于本地化)。我需要包含 NSWindow调整大小以修复内容。我可以提供固定/最小宽度。
使用 AppKit 委托(delegate)创建一个新的 Mac 应用程序会产生一个相当简单的 AppDelegate:

import Cocoa
import SwiftUI

@main
class AppDelegate: NSObject, NSApplicationDelegate {
func applicationDidFinishLaunching(_ aNotification: Notification) {
// Create the SwiftUI view that provides the window contents.
let contentView = ContentView()

// Create the window and set the content view.
window = NSWindow(
contentRect: NSRect(x: 0, y: 0, width: 480, height: 300),
styleMask: [.titled, .closable, .miniaturizable, .resizable, .fullSizeContentView],
backing: .buffered, defer: false)
window.isReleasedWhenClosed = false
window.center()
window.setFrameAutosaveName("Main Window")
window.contentView = NSHostingView(rootView: contentView)
window.makeKeyAndOrderFront(nil)
}
}
然后我有一个带有按钮的 SwiftUI,该按钮添加到标签的文本中以模拟更改文本:
import SwiftUI

struct ContentView: View {
@State var text = "Hello, World!"

var body: some View {
VStack {
Text(text)
.frame(maxWidth: .infinity, maxHeight: .infinity)
Button("Add Some Text") {
text += "\nHello, World!"
}
}
}
}
单击按钮最终会导致添加过多的文本行并且标签会被截断。
如何更新容器 NSWindow SwiftUI View 大小改变时的内容大小?

最佳答案

据我了解,您需要以下内容(使用 Xcode 12.1 测试)

struct ContentView: View {
@State var text = "Hello, World!"

var body: some View {
VStack {
Text(text)
.frame(maxWidth: .infinity, maxHeight: .infinity)
Button("Add Some Text") {
text += "\nHello, World!"
}
}
.frame(minWidth:480, minHeight: 300) // << this for default
.fixedSize() // << this to update container
}
}

关于macos - 更新 NSWindow 内容大小以适应 SwiftUI View ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64836076/

31 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com