@@ -9,29 +9,33 @@ import Swift
9
9
import SwiftUI
10
10
11
11
open class NSHostingPopover < Content: View > : NSPopover {
12
- var presentationManager : PresentationManager !
12
+ private var presentationManager : PresentationManager !
13
13
14
- var _contentViewController : NSHostingController < ContentWrapper > {
15
- contentViewController as! NSHostingController < ContentWrapper >
14
+ private var _contentViewController : CocoaHostingController < ContentWrapper > {
15
+ contentViewController as! CocoaHostingController < ContentWrapper >
16
16
}
17
17
18
18
public var rootView : Content {
19
19
get {
20
- _contentViewController. rootView . content
20
+ _contentViewController. mainView . content
21
21
} set {
22
- _contentViewController. rootView = . init ( content: newValue , owner : self )
22
+ _contentViewController. mainView . content = newValue
23
23
24
- contentSize = _contentViewController. sizeThatFits ( in : Screen . main . bounds . size )
24
+ _contentViewController. view . layout ( )
25
25
}
26
26
}
27
27
28
28
public init ( rootView: Content ) {
29
29
super. init ( )
30
30
31
31
presentationManager = . init( self )
32
-
33
- contentViewController = NSHostingController ( rootView: ContentWrapper ( content: rootView, owner: self ) )
34
- contentSize = _contentViewController. sizeThatFits ( in: Screen . main. bounds. size)
32
+
33
+ let contentViewController = CocoaHostingController ( mainView: ContentWrapper ( content: rootView, owner: self ) )
34
+
35
+ contentViewController. parentPopover = self
36
+
37
+ self . animates = true
38
+ self . contentViewController = contentViewController
35
39
}
36
40
37
41
public required init ? ( coder: NSCoder ) {
@@ -42,20 +46,23 @@ open class NSHostingPopover<Content: View>: NSPopover {
42
46
// MARK: - Auxiliary Implementation -
43
47
44
48
extension NSHostingPopover {
45
- struct ContentWrapper : View {
46
- let content : Content
49
+ private struct ContentWrapper : View {
50
+ var content : Content
47
51
48
52
weak var owner : NSHostingPopover ?
49
53
50
54
var body : some View {
51
- owner. ifSome { owner in
55
+ if let owner = owner {
52
56
content
53
57
. environment ( \. presentationManager, owner. presentationManager)
58
+ . onChangeOfFrame { _ in
59
+ owner. _contentViewController. view. layout ( )
60
+ }
54
61
}
55
62
}
56
63
}
57
64
58
- class PresentationManager : SwiftUIX . PresentationManager {
65
+ private class PresentationManager : SwiftUIX . PresentationManager {
59
66
private unowned let popover : NSHostingPopover
60
67
61
68
public var isPresented : Bool {
0 commit comments