提问人:pcholka 提问时间:9/28/2023 更新时间:9/28/2023 访问量:146
NSPopover 在 macOS Sonoma 上不显示内容
NSPopover not showing content on macOS Sonoma
问:
我遇到了一个奇怪的问题,即 NSPopover 不显示内容。同样奇怪的是,在 Xcode Debug View Hierarchy 中检查视图时,它会按预期呈现所有视图。
(https://i.stack.imgur.com/Ewa81.png)
以下是 Xcode 调试视图层次结构的样子: (https://i.stack.imgur.com/rL5a4.png)
我只是不明白这个问题;为什么 LoginViewController 的视图不显示。此问题始于 macOS Sonoma。
以下是 Popover 设置:
{
_popover = NSPopover.new;
_popover.animates = NO;
_popover.behavior = NSPopoverBehaviorApplicationDefined;
NSViewController* vc;
if (user == nil)
{
vc = LoginViewController.new;
}
else
{
vc = MessageViewController.new;
}
_popover.contentViewController = [RootViewController.alloc initWithRootViewController:vc];
[_popover.contentViewController loadView];
_statusItem = [NSStatusBar.systemStatusBar statusItemWithLength:24];
_statusItem.button.action = @selector(onPress);
_statusItem.button.target = self;
[self reloadPopoverTrayImageForce:YES];
}
以下是 Popover 的 RootViewController 的设置方式。我在这里没有任何不合标准的意思,只是将子视图控制器和他的视图嵌入到父视图控制器中。
{
self.view = NSView.new;
self.view.translatesAutoresizingMaskIntoConstraints = NO;
[self.view addSubview:self.containerView];
if (self.rootViewController)
{
[self addChildViewController:self.rootViewController];
[self.containerView addSubview:self.rootViewController.view];
self.rootViewController.view.translatesAutoresizingMaskIntoConstraints = NO;
id r = @{ @"root": self.rootViewController.view };
[self.containerView addFor:r constraints:@"|[root]|"];
[self.containerView addFor:r constraints:@"V:|[root]|"];
}
[self.view addSubview:self.footerView];
[self reloadConstraints];
id v = @{
@"container": self.containerView,
@"footer": self.footerView
};
[self.view addConstraint:[NSLayoutConstraint
constraintWithItem:self.view attribute:NSLayoutAttributeWidth relatedBy:NSLayoutRelationEqual
toItem:nil attribute:NSLayoutAttributeNotAnAttribute multiplier:1.0 constant:WIDTH]];
[self.view addConstraint:[NSLayoutConstraint
constraintWithItem:self.view attribute:NSLayoutAttributeHeight relatedBy:NSLayoutRelationEqual
toItem:nil attribute:NSLayoutAttributeNotAnAttribute multiplier:1.0 constant:HEIGHT]];
[self.view addFor:v constraints:@"|[container]|"];
[self.view addFor:v constraints:@"|[footer]|"];
[self.view addFor:v constraints:@"V:|[container]-0-[footer(44)]|"];
}
答:
0赞
wwwrodia
9/28/2023
#1
对于 macOS,Sonoma AppKit 对 NSView 的绘图行为进行了更改。现在,视图的绘制不受其边界的限制。
添加子控制器的视图时,请尝试将 .默认情况下,在 macOS Sonoma 上,它是 false。clipsToBounds = true
此外,请尝试为所有自定义视图进行设置。clipsToBounds = true
评论