賞金將在 5 小時后到期。此問題的答案有資格獲得 500聲望賞金。 Grokys希望引起對這個問題的更多關注。
在 macOS Monetrey 上,當我將子 NSWindow 移動到另一個螢屏(通過手動拖動它)時,它會消失。使用 SwiftUI 的最小復制:
import SwiftUI
struct ContentView: View {
var body: some View {
Button("Hello World", action: openChild)
.padding(50)
}
func openChild() {
let win = NSWindow();
let parent = NSApp.mainWindow
parent?.addChildWindow(win, ordered: NSWindow.OrderingMode.above)
win.makeKeyAndOrderFront(self)
}
}
struct ContentView_Previews: PreviewProvider {
static var previews: some View {
ContentView()
}
}
(我知道這可能不是“正確”的 SwiftUI 做事方式,它只是用盡可能少的代碼來演示問題——這實際上發生在低級 Obj-C 代碼中)
有趣的是,如果你:
- 顯示子視窗
- 將其移動到另一個螢屏(它消失)
- 選擇“Window -> Move to [Name of other screen]”
子視窗重新出現,現在可以在螢屏之間自由移動。
從用戶報告中,我了解到 Big Sur 不會發生這種行為。
我知道有顯示子視窗并允許它們在螢屏之間移動的應用程式,允許這樣做的正確咒語是什么?
uj5u.com熱心網友回復:
我相信你只是想添加第二個NSWindow,或一個NSPanel. 沒有子視窗關系。例如,在 AppKit 基于檔案的應用程式中,您將為-[NSDocument makeWindowControllers]一個檔案覆寫和設定多個視窗控制器。
子視窗用于特殊用例,例如:自動完成串列之類的功能,您希望在其中有一個無鑲邊視窗,在文本欄位下方有一個表格視圖,移動時它會自動跟隨父視窗。
這是帶有這樣一個自動完成視窗的 TextEdit 和相同的 Xcode Debug View Hierarchy:
請參閱檔案中的此注釋:
將 childWin 添加為視窗的子視窗后,它會保持在位置指示的相對位置,以供后續涉及任一視窗的排序操作。當此附件處于活動狀態時,移動 childWin 不會導致視窗移動(如滑入或滑出抽屜),但移動視窗會導致 childWin 移動。
我不相信子視窗曾經打算從其父視窗獨立移動,尤其是不同的螢屏。
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/436515.html
上一篇:自定義ReactNative滑塊
