SDG*_*ary 1 macos xcode nsviewcontroller swift
我是新手 Mac OS X 开发人员。我认为这是一个简单的问题,但我无法通过搜索找到任何有用的结果。
如何限制第二个视图控制器的大小?
我从一个简单的 Mac OS X 应用程序开始,只有一个视图控制器。我可以选择包含视图控制器的窗口,然后选择“大小检查器”并选中“最小内容大小”框,并为窗口指定最小 x 和 y。
这允许我指定第一个视图控制器的最小尺寸,正如我所期望的。一切都很好。
然后我添加了第二个视图控制器,带有来自第一个视图控制器的 Modal segue,由按下按钮触发。我将 NSTextView 添加到第二个视图控制器,以显示属性字符串。文本视图工作正常,正确显示属性字符串。这个文本视图是一个单独的窗口,没有最小尺寸限制。
那么如何为第二个视图控制器视图指定最小尺寸?这通常是在 Interface Builder 中完成还是以编程方式完成?当我使用文档大纲逐步浏览视图层次结构时,我看不到如何使用大小检查器指定最小大小。我错过了什么吗??
这是我的简化代码:
文件“ViewController.swift”
class ViewController: NSViewController {
...
override func prepare(for segue: NSStoryboardSegue, sender: Any?) {
let secondVC: SecondViewController = segue.destinationController as! SecondViewController
secondVC.reportAttrString = myReport.reportText
}
...
}
Run Code Online (Sandbox Code Playgroud)
文件“SecondViewController.swift”
class SecondViewController: NSViewController {
var reportAttrString = NSMutableAttributedString()
@IBOutlet var ReportTextView: NSTextView!
}
Run Code Online (Sandbox Code Playgroud)
我将不胜感激任何建议,或指向任何可能对我有帮助的文档或教程的指针。
最简单的方法是:
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)
}
Run Code Online (Sandbox Code Playgroud)
尽管如果您正在寻找手动方法,那么以下方法也适用。
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
}
}
Run Code Online (Sandbox Code Playgroud)
进一步阅读:
| 归档时间: |
|
| 查看次数: |
1872 次 |
| 最近记录: |