Autolayout不能与带有Storyboard的NSSplitView和NSPageController一起使用.这是Apple Bug吗?

iOS*_*com 4 macos cocoa objective-c autolayout nslayoutconstraint

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

该项目是一个简单的故事板项目.NSWindowController加载一个NSPageController,它加载一个包含3个窗格的NSSplitView.除了加载屏幕的代码之外,示例项目中没有代码.当项目运行时,它看起来像这样在此输入图像描述.

当调整窗口大小时,如何获取约束以使splitView一直延伸到末尾?奇怪的是,如果你将NSWindowController的contentController从NSPageController切换到NSSplitViewController,那么每件事都按预期工作.这是Apple Bug吗?我很感激任何答案swift/objectivec please.我试过但没有任何作用.

[编辑] - 基于下面的答案和进一步研究(联系Apple),似乎NSPageViewController不使用自动布局约束,但依赖于其子视图上的自动调整遮罩和框架设置.

因此,当页面控制器创建其视图控制器时,我们应该设置:

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

有了这个,问题就解决了.我希望将来作为更新,这个控件适用于Autolayout约束,因为它看起来更自然.

man*_*ahn 5

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

尝试使用NSAutoresizingMaskOptions你的NSSplitView.首先,删除内部的所有约束NSPageController.

然后:

splitView.autoresizingMask = NSViewWidthSizable | NSViewHeightSizable;
splitView.frame = pageController.view.bounds;
Run Code Online (Sandbox Code Playgroud)

要么

splitView.autoresizingMask = [.ViewWidthSizable, .ViewHeightSizable]
splitView.frame = pageController.view.bounds
Run Code Online (Sandbox Code Playgroud)

编辑

这里制作了一个基于你的项目