- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在尝试在 SwiftUI 中使用 NSSplitViewController 并拥有一个简单的主视图和详细 View ,如下面的代码片段所示。这工作正常,但是在调整窗口大小时,SplitView 无法展开,而在 View 调试器中我看到几何图形具有调整大小的窗口的尺寸。
如何根据窗口尺寸(或 GeometryReader)调整 SplitView 的大小。
struct SampleView: View {
@EnvironmentObject var env : AppEnvironment
var body: some View {
Group {
if (self.env.files.isEmpty) {
Text("loading")
} else {
GeometryReader { geometry in
SplitView(master: {
Text("master")
.background(Color.yellow)
}, detail: {
Text("Detail")
.background(Color.orange)
}).frame(width: geometry.size.height, height: geometry.size.height)
}
}
}
}
}
下面是SplitView的实现
//
// Source: https://gist.github.com/HashNuke/f8895192fff1f275e66c30340f304d80
//
struct SplitView<Master: View, Detail: View>: View {
var master: Master
var detail: Detail
init(@ViewBuilder master: () -> Master, @ViewBuilder detail: () -> Detail) {
self.master = master()
self.detail = detail()
}
var body: some View {
let viewControllers = [NSHostingController(rootView: master), NSHostingController(rootView: detail)]
return SplitViewController(viewControllers: viewControllers)
}
}
struct SplitViewController: NSViewControllerRepresentable {
var viewControllers: [NSViewController]
private let splitViewResorationIdentifier = "com.company.restorationId:mainSplitViewController"
func makeNSViewController(context: Context) -> NSViewController {
let controller = NSSplitViewController()
controller.splitView.dividerStyle = .thin
controller.splitView.autosaveName = NSSplitView.AutosaveName(splitViewResorationIdentifier)
controller.splitView.identifier = NSUserInterfaceItemIdentifier(rawValue: splitViewResorationIdentifier)
let vcLeft = viewControllers[0]
let vcRight = viewControllers[1]
vcLeft.view.widthAnchor.constraint(greaterThanOrEqualToConstant: 30).isActive = true
vcRight.view.widthAnchor.constraint(greaterThanOrEqualToConstant: 70).isActive = true
let sidebarItem = NSSplitViewItem(contentListWithViewController: vcLeft)
sidebarItem.canCollapse = false
// I'm not sure if this has any impact
// controller.view.frame = CGRect(origin: .zero, size: CGSize(width: 800, height: 800))
controller.addSplitViewItem(sidebarItem)
let mainItem = NSSplitViewItem(viewController: vcRight)
controller.addSplitViewItem(mainItem)
return controller
}
func updateNSViewController(_ nsViewController: NSViewController, context: Context) {
print("should update splitView", nsViewController.view.superview?.frame, nsViewController.view.frame)
}
}
最佳答案
问题不在分割 View 中,而是在内容 subview 中,因为默认情况下 SwiftUI View 会收紧到内容,因此以下内容
SplitView(master: {
Text("master") // Master content view
.frame(maxWidth: .infinity, maxHeight: .infinity) // << here !!
.background(Color.yellow)
}, detail: {
Text("Detail") // Details content view
.frame(maxWidth: .infinity, maxHeight: .infinity) // << here !!
.background(Color.orange)
})
给出了预期的内容
注意:我使用了.frame(width:geometry.size.width,height:geometry.size.height)
,`因为认为这是一个拼写错误。
关于swift - 使用 SwiftUI 时调整 NSSplitViewController 的大小,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61627448/
我有一个 NSSplitViewController,其中有 2 个 View Controller 作为 splitViewItems。这工作得很好。 现在我想在 Storyboard中为我的 Sp
我有一个使用 NSSplitViewController 作为根的应用程序,并连接了一个 NSTabViewController 作为其详细 View Controller 。 此应用程序设置为以 1
我创建了一个简单的 NSViewController 并想添加一个只有一个 subview 的 Split View。 Split View应由 NSSplitViewController 控制,因为
我正在尝试使用 Cocoa 创建一个小型 Finder 克隆。我将源列表 TableView (充当侧边栏)和标准 TableView 放置在由 NSSplitViewController 控制的 N
我想在我的 NSSplitViewController 中使用自定义 NSSplitView。 docs说: To provide a custom split view, set this prop
来自 NSSplitViewController 类引用 https://developer.apple.com/library/prerelease/mac/documentation/AppKit
我正在尝试迁移我的 Objective-C,现在将 Swift 知识提高到 Mac OS X 的应用程序。陡峭的学习曲线! 我正在尝试根据在“主视图”上按下的按钮在“详细 View ”中加载具有不同
我有一个 Split View Controller 。除了一件事,我让一切正常: 用户可以拖动中心条来调整底部 View 的大小。 我已经摆弄 Storyboard一段时间了,但没有找到禁用它的方法
我正在尝试在 SwiftUI 中使用 NSSplitViewController 并拥有一个简单的主视图和详细 View ,如下面的代码片段所示。这工作正常,但是在调整窗口大小时,SplitView
XIB 是否支持 NSSplitViewController/NSSplitViewItem?我只看到 NSSplitView 我可以拖放 NSViewController 并将其子类化为 NSSpl
我有一个 NSSplitViewController,其中 first viewcontroller 显示一个表,second viewcontroller 应该根据选择表行。 我正在使用 table
我希望有人能帮我解决这个问题。 无论我做什么,无论是通过 IB 还是在代码中,我都无法使新的 NSSplitViewController 及其项目可折叠或保持其优先级。 尽管此视频另有说明,但无法通过
Xcode 8.2.1、Swift 3.0.2、macOS 10.12 我有一个 NSSplitViewController,它有 3 个 Pane (请注意 NS;这是针对 Mac 应用程序的)。
您好,我在将数据发送到 NSSplitViewController 时遇到问题。看起来不像IOS开发那样工作。 第一个 Controller : class LoginController: NSVi
概述:我的应用程序结构如下所示: NSSplitViewController `- SidebarViewController | `- NSOutlineViewController |
你好,我已经看到这个问题被问过几次了,但还没有明确的答案,所以我为 xcode 7 和 swift2 创建了它(无论如何这可能已经改变了一些东西)。 我使用 Xcode 7 和 Cocoa OSX S
我一直在使用 Storyboard开发一个 macOS 应用程序,该 Storyboard定义了一个带有工具栏和 Split View的主窗口。它是用 Swift 3 编写的——我还没有迁移到 Swi
根据 NSSplitViewControllers 的文档,关联的 NSSplitView 使用 NSSplitViewController 作为其委托(delegate)。特别是在文档中,“ Spl
我正在开发一个 cocoa 应用程序。它包含一个带有一些功能按钮的工具栏。就像里德一样。 我想在调整分割 View 大小的同时调整工具栏部分的大小。有些东西的工作原理如下。如何实现这样的功能? 任何人
我是一名优秀的程序员,十分优秀!