swift - 如何在 OS X 应用程序中限制第二个 NSViewController 最小尺寸?
问题描述
我是一名新手 Mac OS X 开发人员。我认为这是一个简单的问题,但我无法通过搜索找到任何有用的结果。
如何限制 SECOND 视图控制器的大小?
我从一个简单的 Mac OS X 应用程序开始,只有一个视图控制器。我可以选择包含 View Controller 的窗口,然后选择“Size Inspector”并选中“Minimum Content Size”框,并为窗口指定最小 x 和 y。
正如我所料,这允许我为第一个视图控制器指定最小尺寸。一切都很好。
然后我添加了第二个视图控制器,它带有来自第一个视图控制器的模态序列,由按下按钮触发。我将 NSTextView 添加到第二个视图控制器,以显示属性字符串。文本视图工作正常,正确显示属性字符串。这个文本视图是一个单独的窗口,没有最小尺寸限制。
那么如何为第二个视图控制器视图指定最小尺寸呢?这通常是在 Interface Builder 中完成的,还是以编程方式完成的?当我使用 Document Outline 逐步浏览视图层次结构时,我看不到如何使用 Size Inspector 指定最小尺寸。我错过了什么吗?
这是我的简化代码:
文件“ViewController.swift”
class ViewController: NSViewController {
...
override func prepare(for segue: NSStoryboardSegue, sender: Any?) {
let secondVC: SecondViewController = segue.destinationController as! SecondViewController
secondVC.reportAttrString = myReport.reportText
}
...
}
文件“SecondViewController.swift”
class SecondViewController: NSViewController {
var reportAttrString = NSMutableAttributedString()
@IBOutlet var ReportTextView: NSTextView!
}
我将不胜感激任何可能对我有帮助的建议或任何文档或教程的指针。
解决方案
最简单的方法是:
class SecondViewController: NSViewController, NSWindowDelegate {
override func viewWillAppear() {
super.viewWillAppear()
self.view.window?.delegate = self
self.view.window?.minSize = NSSize(width: 100, height: 100)
}
}
override func viewDidAppear() {
super.viewDidAppear()
var frame = self.view.window!.frame
var initialSize = NSSize(width: 100, height: 100)
frame.size = initialSize
self.view.window?.setFrame(frame, display: true)
}
尽管如果您正在寻找手动方法,那么以下方法也可以。
class SecondViewController: NSViewController, NSWindowDelegate {
override func viewWillAppear() {
super.viewWillAppear()
self.view.window?.delegate = self
// Set the initial size
var frame = self.view.window?.frame
var initialSize = NSSize(width: 100, height: 100)
frame.size = initialSize
self.view.window?.setFrame(frame, display: true)
}
func windowWillResize(_ sender: NSWindow, to frameSize: NSSize) -> NSSize {
let minimumSize = NSSize(width: 100, height: 100)
var newSize = NSSize()
if(frameSize.width < minimumSize.width) {
newSize.width = minimumSize.width
} else {
newSize.width = frameSize.width
}
if(frameSize.height < minimumSize.height) {
newSize.height = minimumSize.height
} else {
newSize.height = frameSize.height
}
return newSize
}
}
进一步阅读:
推荐阅读
- azure-devops - 使用 GitVersion 生成版本号时 Azure DevOps 生成错误
- ios - 向导航控制器添加自定义按钮
- c# - 加载数据本地infile Ubuntu 20.04
- c - 从C中的字符串构建一棵树(在二叉树中定义)
- android - 离子发布到 https 服务器错误:“无法建立 TLS 连接:
- angular - 如何避免可拖动按钮以离子+角度拖动到屏幕外?
- c - 我们可以在 Windows 10 上写入 FAT32 文件系统的 FAT 部分吗?
- oracle - 查询不断获取新行的表时如何保证顺序?
- .net - 如何将文件从 .net 核心客户端上传到 .net 核心 API?我尝试从 .Net 客户端使用此 API,但出现超时异常或 Badrequest
- reactjs - 自定义 Autodesk GuiViewer3D 工具栏