问题标签 [nssplitviewcontroller]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
2 回答
1297 浏览

macos - 如何将工具栏(或其项目)与拆分视图控制器的子项的前沿对齐?

在 iOS 中,工具栏可以添加到任何视图中。然而,在 macOS 中,似乎只能向窗口添加工具栏。

我正在开发一个带有带有工具栏的拆分视图控制器的应用程序,但工具栏的项目仅对右视图控制器的上下文有意义

例如,假设我有某种文本编辑器,其中左窗格显示所有文档(如在 Notes 应用程序中),右窗格显示可以编辑的实际文本。格式按钮仅影响右窗格中的文本。因此,将工具栏放置在该右侧窗格中而不是将其拉伸到窗口的整个宽度上似乎非常直观。

带有拆分视图控制器的示例窗口

有没有办法做到这一点?
(或者是否有一个很好的用户体验原因说明这将是一个不好的做法?)

我注意到 Apple 如何在他们的 Notes 应用程序中解决这个问题:他们仍然使用全角工具栏,但将仅与右窗格相关的按钮项与该窗格的前沿对齐。

笔记应用截图

因此,如果无法在视图控制器中放置工具栏,如何将工具栏项与右视图控制器的前沿对齐,如上面的屏幕截图所示?


编辑:

根据TimTwoToes 的回答和Willeke在评论中链接的帖子,似乎可以使用自动布局来约束带有拆分视图的子视图的工具栏项。如果有固定的工具栏布局,此解决方案将起作用。但是,Apple 鼓励(有充分的理由)让用户自定义您的应用程序的工具栏。

因此,我无法将约束添加到工具栏中的固定项目。相反,一个可行的解决方案似乎是使用领先的灵活空间并相应地调整其大小。

0 投票
1 回答
141 浏览

swift - NSSplitViewController 不调用委托方法

我正在使用 NSSplitViewController 子类,并且没有调用委托方法。

这纯粹是在没有 nib/storyboard 的情况下以编程方式进行的。

可以将代码复制到新项目中。该文件需要命名为 main.swift。还要删除项目设置中的“主界面”。

运行代码时,您可以看到拆分视图显示并且工作正常。

viewDidLoad() 方法打印“Project1.MySplitViewController”,因此设置了委托。

但是没有调用 splitView(_:additionalEffectiveRectOfDividerAt:) 方法(或任何其他 NSSplitViewDelegate,如果已实现)。

0 投票
1 回答
40 浏览

objective-c - 如何从 SourceViewController 访问 DetailViewController 方法;都在 NSSplitViewController (Objective-C) 中

我是 Objective-C 的新手,觉得学习很重要。我给了自己以下挑战:

我有一个 NSSplitViewController 设置,每个视图有两个类;(i) SourceViewController:NSViewController 和 (ii) DetailViewController:NSViewController。

通过选择 SourceViewController 的 NSTableView 行,我想更改 SourceViewController 内 ImageView 中的图像

在此处输入图像描述

我在 DetailViewController 中有一个实例类方法,我试图从 SourceViewController 访问它:

为了获得访问权限,我通过 NSSplitViewController 超类创建了一个指向 DetailViewController 类实例的指针。所以我上树再下到 DetailViewController:

但是,这不起作用,因为自动完成无法识别 imageVC 指向的函数。打印 imageVC.className 输出,显示名称是“DetailViewController”。

我做错了什么,我该如何解决?

提前致谢

0 投票
1 回答
275 浏览

macos - 如何使用旧代码库中的 Big-Sur 样式工具栏 + 拆分视图?

根据这个 WWDC 2020 演讲,Big Sur 的工具栏会自动分区以匹配并遵循NSSplitView下面的窗格。

不幸的是,这需要我们使用10.10 Yosemite 中引入NSViewController的 api 的后期版本NSSplitView(请参阅此处相应的WWDC 2014 会议 PDF。)

从一个非常古老的代码库中使用它的最简单方法是什么NSViewController NSSplitView

众所周知,新样式NSSplitView在 XIB 中不可用,仅在故事板中可用,如StackOverflow 帖子中所述。

0 投票
0 回答
157 浏览

swift - macOS 11:更改 NSSplitViewItem 的 NSTitlebarSeparatorStyle 不会立即更新

如果更改titlebarSeparatorStylea 的属性NSSplitViewItem,则窗口不会立即更新。您必须先将焦点设置到另一个应用程序才能更新窗口。但是,窗口也没有正确更新。例如,阴影永远不会真正得到应用。如果您在情节提要中设置属性,它将起作用。但是,如果您想以编程方式更改它,它不会按预期工作。

我希望像 Big Sur 中的 Finder:如果您将 Finder 窗口的内容显示为符号,则工具栏下方没有阴影或线条。如果您切换到另一个视图(如列视图),则会添加一行并且工具栏将变为透明。

我添加了一个示例项目来演示该问题。

GitHub:SplitViewItem-titlebarSeparator 在此处输入图像描述

macOS 11.0.1 测试版 (20B5012d)

Xcode 版本 12.2 beta 3 (12B5035g)

https://openradar.appspot.com/radar?id=4949260923568128

0 投票
0 回答
186 浏览

swift - NSSplitViewController,想要在全屏时通过移动鼠标来禁用打开侧边栏的行为

当使用 NSSplitviewController 将屏幕设置为全屏时,当鼠标移动到左边缘时,侧边栏打开,或者更确切地说,是在顶部绘制。

我想禁用上述行为,同时保持从菜单打开侧边栏的功能。

我做了很多研究并没有找到它。
有没有办法做到这一点?
请告诉我。

谢谢。

显示侧边栏菜单是可以的,想通过移动到鼠标左边缘来避免出来。 在此处输入图像描述

我尝试了以下方法,但没有奏效

github: https ://github.com/llscsrl/splitvc

0 投票
1 回答
676 浏览

xcode - macOS:在 Big Sur 中具有半透明效果的 NSToolbar

我正在为 Big Sur 开发一个新的 Xcode 项目,主情节提要中有一个“带侧边栏的拆分视图”场景。我想让窗口标题和工具栏具有您在 Safari 或 Finder 的工具栏中看到的半透明效果。在我的故事板中,我指定了“全尺寸内容视图”和“隐藏标题文本”,在故事板中它看起来像我想要的:

在此处输入图像描述

但是当我构建并运行它时,窗口的工具栏是纯白色的:

在此处输入图像描述

现在,如果我禁用“隐藏标题栏”复选框,它在故事板中看起来很好,标题和工具栏项目在同一行:

在此处输入图像描述

现在,当我构建并运行它时,工具栏具有我想要的半透明效果,但标题位于工具栏项目上方的第二层:

在此处输入图像描述

我不确定我还能做些什么来控制它。理想情况下,我会隐藏标题栏并保持半透明,但它似乎不起作用。还有什么我可以尝试控制的吗?

如果不是,我希望标题与工具栏项处于同一级别,就像在情节提要中一样。但即使这样也不能按预期工作。

关于我可以尝试什么的任何想法?我尝试更改工具栏样式,但它们都有相似的结果。

编辑:我尝试使用 Apple 自己的代码“使用大纲和拆分视图导航分层数据”,并在启用“全尺寸内容视图”和“隐藏标题栏”复选框调整情节提要后,我看到了同样的问题: 即工具栏变成白色。所以这很可能是苹果框架的错误?我不确定,所以我提交了一个错误来找出答案。

0 投票
1 回答
35 浏览

swift - 我正在swift中寻找一个简单的splitView macOS模板,谁能提供一个方向?

我在目标 C 和 swift 中的 iOS 开发方面经验丰富。现在我想构建一个简单的 macOS 应用程序供个人使用,在考虑用户界面时,我基本上想要一个带有菜单链接的侧边栏和一个带有内容的右窗格。我一直在玩 NSSplitViewController 并且基础工作正常。但是,假设我们的左侧边栏中有三个菜单项,例如主页仪表板和设置。右边显示的默认是 HomeViewController,我可以做到。现在,当我单击仪表板或设置时,我希望右侧部分加载 DashboardViewController 或 SettingsViewController 并替换 HomeViewController。当我单击 Home 时,HomeViewController 正在替换前一个。

所以我在想我需要替换其中一个 NSSplitViewItems(索引 1)的 viewController,但不能让它工作,当然也需要从情节提要或 NIB 加载 NSView。

谁能提供一个工作示例?

0 投票
0 回答
17 浏览

nssplitview - NSSplitViewController:如何判断 NSSplitViewItem 何时折叠

我有一个带有 3 个拆分视图项目的 NSSplitViewController,我想检测最左侧的侧边栏项目何时折叠或展开。我一直在查看文档,但我不知道是否有任何通知或委托可以告诉我这件事。处理这个问题的正确方法是什么?理想情况下,我想知道,如果它被折叠,我可以显示一个工具栏按钮项以再次展开它......但如果它已经展开,则隐藏该按钮。我知道isCollapsedNSSplitViewItem 上有一个属性,但它无法告诉我项目何时折叠或没有折叠。

0 投票
0 回答
14 浏览

swift - 对 NSSplitViewController 中的视图应用约束

我有一个经典的垂直 NSSplitViewController 并且在窗格约束中没有成功。

如果右窗格中没有任何内容,我可以毫无问题地调整窗口大小,左窗格的宽度不会改变。

在此处输入图像描述

但是,如果我在右窗格中有一个视图,并且我想调整窗口大小以使右窗格的宽度更大,则调整大小的是左窗格:

在此处输入图像描述

我知道这是一个约束问题,但我不知道如何解决这些约束。

在拆分视图控制器中,我有以下代码:

(我在旧的 stackoverflow 答案中找到了代码,我已经复制了它,但我不习惯编写约束,因为它是在 embedViewController 方法中编写的。

我确切地说,在 IB 中,我将窗格的持有优先级约束固定如下:左窗格为 200,右窗格为 199

有人能帮我吗?