【发布时间】:2020-07-16 05:56:10
【问题描述】:
我在设置一个简单的拆分视图时遇到了麻烦。第一个拆分视图已折叠。我需要为它设置一个最小宽度。我在网上看到的所有内容(NSSplitViewController/NSSplitView 很少见)都是针对 Objective-C 的,将所有内容都放在应用程序委托中,并使用 XIB。
这是场景: 窗口控制器与 SplitView 控制器有一个 segue,它有两个拆分视图(2 个视图控制器)。
哪个对象需要有 NSSplitViewDelegate?
编辑:添加代码 sn-p: 例如,我有这个:
import Cocoa
class ViewController: NSSplitViewController, NSSplitViewDelegate {
@IBOutlet weak var pdlSplitView: NSSplitView!
override func viewDidLoad() {
super.viewDidLoad()
}
override func splitView(splitView: NSSplitView, constrainMinCoordinate proposedMinimumPosition: CGFloat, ofSubviewAt dividerIndex: Int) -> CGFloat {
return proposedMinimumPosition + 200
}
}
我还有什么遗漏的吗?
谢谢
更新
基于下面的 cmets,我进行了更改,但现在我在 AppDelegate 的类定义上获得了 sigAbort。 Full code
视图控制器:
import Cocoa
class ViewController: NSSplitViewController, NSSplitViewDelegate {
@IBOutlet weak var pdlSplitView: NSSplitView!
let publicDataListings : PDL = PDL()
override func viewDidLoad() {
super.viewDidLoad()
// Do any additional setup after loading the view.
self.pdlSplitView.delegate = self
}
override func splitView(splitView: NSSplitView, constrainMinCoordinate proposedMinimumPosition: CGFloat, ofSubviewAt dividerIndex: Int) -> CGFloat {
return proposedMinimumPosition + 200
}
}
侧边栏视图控制器:
import Cocoa
class SidebarViewController: NSViewController {
override func viewDidLoad() {
super.viewDidLoad()
// Do view setup here.
}
}
数据集视图控制器:
import Cocoa
class DatasetViewController: NSViewController, NSSplitViewDelegate {
override func viewDidLoad() {
super.viewDidLoad()
// Do view setup here.
}
}
更新 我拿走了我的自定义 NSSplitViewController 类并创建了两个 NSSplitView 类,一个使用约束方法。现在,我看到了两个子视图,但它们比应有的要小得多:
是否有任何人使用 Swift 和 Storyboards 做到了这一点?
【问题讨论】:
-
你在使用自动布局吗?您希望应用运行的操作系统的早期版本是什么?如果您的目标是 10.8 或更高版本并使用自动布局,则拆分视图将遵守其子视图的约束。因此,最小宽度可能是隐含的,因为子视图中的某些内容具有固有宽度并抵抗压缩并且对子视图具有前导和尾随约束。或者您可以在子视图上创建显式宽度约束,使其大于或等于某个常数。
-
我可以定位 10.10+。我正在尝试在 Swift 中执行此操作。我尝试过应用约束,但它们没有坚持。我知道现在这是一个移动世界,但见鬼,我现在只需为 Swift 中的 SplitView Hello World 付费。然后我就去参加比赛了。
-
如果你实现了某些拆分视图委托方法,那么拆分视图将不会使用自动布局。有关详细信息,请参阅 10.8 的 AppKit 发行说明。另外,我不确定拆分视图委托方法是否与
NSSplitViewController兼容。如果删除该委托方法没有帮助,请显示您尝试设置的约束以及您是如何做到的。 -
删除 NSSplitViewController 会在委托方法中产生错误。
-
我不建议删除它。我建议您使用自动布局,而不是尝试限制视图大小的
NSSplitViewDelegate方法。
标签: xcode macos swift nssplitview