【发布时间】:2017-07-25 17:46:32
【问题描述】:
我在 IB 的 NSScrollView 中放置了一个自定义类 BigView 的实例,它是 NSView 的子类。我的BigView 的内容大小将在运行时计算。设置内容大小的最佳做法是什么?
按照 The Big Nerd Ranch 指南中的建议,覆盖 intrinsicContentSize, 似乎不起作用 - 框架保持其原始大小:
class BigView: NSView {
...
override var intrinsicContentSize: NSSize { // doesn't work?!
return NSSize(width: 10000, height: 10000)
}
...
}
以编程方式(或在 IB 中)设置框架确实有效:
class BigView: NSView {
...
override func awakeFromNib() {
...
self.frame = NSRect(x: 0, y: 0, width: 10000, height: 10000)
}
...
}I
或来自控制器:
class ViewController: NSViewController {
@IBOutlet weak var bigView: BigView!
...
override func viewDidLoad() {
super.viewDidLoad()
bigView.frame = NSRect(x: 0, y: 0, width: 1000, height: 1000)
}
...
}
这也可以在整个滚动视图的documentView 属性中完成:
class ViewController: NSViewController {
@IBOutlet weak var scrollView: NSScrollView!
...
override func viewDidLoad() {
super.viewDidLoad()
scrollView.documentView?.frame = NSRect(x: 0, y: 0,
width: 1000, height: 1000)
}
...
}
我想也可以使用 AutoLayout 约束。
什么不能覆盖intrinsicContentSize 工作?
【问题讨论】:
-
遇到了完全相同的问题。我发现将内部视图上的 translatesAutoresizingMaskIntoConstraints 设置为 xib 视图上的 NO 或通过覆盖该方法来解决问题。但现在我在运行时收到关于缺少约束的警告。
标签: nsview appkit nsscrollview