gpt4 book ai didi

objective-c - Autolayout 不适用于带有 Storyboard 的 NSSplitView 和 NSPageController。这是苹果虫吗?

转载 作者:太空狗 更新时间:2023-10-30 04:03:06 24 4
gpt4 key购买 nike

我刚刚在 github 上创建了一个空项目 --> here <-- 演示问题(在 objective-c 中完成)

该项目是一个简单的 Storyboard项目。 NSWindowController 加载 NSPageController,后者加载包含 3 个 Pane 的 NSSplitView。示例项目中没有代码,除了加载屏幕的代码。当项目运行时,它看起来像这样 enter image description here .

当调整窗口大小时,如何获得约束以使 splitView 一直延伸到末端?奇怪的是,如果您将 NSWindowController 的 contentController 从 NSPageController 切换到 NSSplitViewController,那么一切都会按预期进行。这是苹果虫吗?请给我任何迅速/客观的答复,我将不胜感激。我试过了,但没有任何效果。

[编辑] - 根据下面的答案和进一步研究(联系 Apple),NSPageViewController 似乎不使用自动布局约束,而是依赖于自动调整掩码和 subview 的框架设置。

所以当页面 Controller 创建它的 View Controller 时,我们应该这样设置:

-(NSViewController *)pageController:(NSPageController *)pageController viewControllerForIdentifier:(NSString *)identifier {
NSViewController *viewController = [self.storyboard instantiateControllerWithIdentifier:identifier];
[viewController.view setAutoresizingMask:(NSViewWidthSizable|NSViewHeightSizable)];
return viewController;
}

至此,问题解决。我希望作为 future 的更新,此控件可以与自动布局约束一起使用,因为它看起来更自然。

最佳答案

我在使用 NSPageController 时遇到了很多问题。我发现解决方案是不使用自动布局。

尝试在您的 NSSplitView 上使用 NSAutoresizingMaskOptions。首先,删除 NSPageController 中的所有约束。

然后:

splitView.autoresizingMask = NSViewWidthSizable | NSViewHeightSizable;
splitView.frame = pageController.view.bounds;

splitView.autoresizingMask = [.ViewWidthSizable, .ViewHeightSizable]
splitView.frame = pageController.view.bounds

编辑

根据您的项目做了一个项目here

关于objective-c - Autolayout 不适用于带有 Storyboard 的 NSSplitView 和 NSPageController。这是苹果虫吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32325420/

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