窗口中的SwiftUI子视图消失
作为一名SwiftUI初学者,我最近刚刚开始创建我的第一个MacOS应用程序。然而,当我试图实现NSVisualEffectView来模糊背景时,我使用的窗口中的SwiftUI子视图消失,swiftui,nsvisualeffectview,Swiftui,Nsvisualeffectview,作为一名SwiftUI初学者,我最近刚刚开始创建我的第一个MacOS应用程序。然而,当我试图实现NSVisualEffectView来模糊背景时,我使用的contentView从屏幕上消失了,根本看不见。它看起来像这样: 因此,我尝试将我在contentView中的文本制作成text(“Hello world!”)。边框(宽:700,高:500),屏幕变成这样: 通过这样做,在左下角,Hello world可以看到。但是,除非我将文本放置在contentView的右上角,否则我似乎无法移动它
contentView
从屏幕上消失了,根本看不见。它看起来像这样:
因此,我尝试将我在contentView
中的文本制作成text(“Hello world!”)。边框(宽:700,高:500)
,屏幕变成这样:
通过这样做,在左下角,Hello world代码>可以看到。但是,除非我将文本放置在contentView
的右上角,否则我似乎无法移动它。有人知道如何解决这个问题吗
*以下是AppDelegate.swift
内容供参考:
import SwiftUI
@main
class AppDelegate: NSObject, NSApplicationDelegate {
var window: NSWindow!
func applicationDidFinishLaunching(_ aNotification: Notification) {
// Create the SwiftUI view that provides the window contents.
let contentView = ContentView()
let visualEffect = NSVisualEffectView()
visualEffect.blendingMode = .behindWindow
visualEffect.state = .active
visualEffect.material = .fullScreenUI
visualEffect.addSubview(NSHostingView(rootView: contentView))
// Create the window and set the content view.
window = NSWindow(
contentRect: .zero,
styleMask: [.titled, .closable, .miniaturizable, .resizable, .fullSizeContentView],
backing: .buffered, defer: false)
window.isReleasedWhenClosed = false
window.center()
window.setFrameAutosaveName("Main Window")
window.contentView = visualEffect
window.makeKeyAndOrderFront(nil)
window.titlebarAppearsTransparent = true
window.titleVisibility = .hidden
}
func applicationWillTerminate(_ aNotification: Notification) {
// Insert code here to tear down your application
}
}
这回答了你的问题吗?在我的例子中,我最大的问题是我的视图(默认的“hello world”)正在离开屏幕。这个问题并不能完全解决我的问题,因为我希望整个窗口都模糊,包括标题栏……更新:@Asperi您发布的解决方案适用于后台,但我只能在contentView()
上实现它,这意味着标题栏再次出现。有什么办法可以改变吗?你只需要把它隐藏起来,就像在@Asperi中一样,它可以工作,但现在底部显示了背景。这能回答你的问题吗?在我的例子中,我最大的问题是我的视图(默认的“hello world”)正在离开屏幕。这个问题并不能完全解决我的问题,因为我希望整个窗口都模糊,包括标题栏……更新:@Asperi您发布的解决方案适用于后台,但我只能在contentView()
上实现它,这意味着标题栏再次出现。有什么办法可以改变吗?你只需要把它隐藏起来,就像在@Asperi中一样,这样就行了,不过现在底部显示了背景?