我已經在IB中的NSScrollView
內放置了一個自定義類BigView
的實例,該實例是NSView
的子類。我的BigView
的內容大小將在運行時計算。設置內容大小的最佳做法是什麼?爲什麼不重寫`NSView`中的`intrinsicContentSize`爲`NSScrollView`工作?
重寫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)
}
...
}
我想人們也可以使用自動版式限制爲好。
什麼不覆蓋intrinsicContentSize
工作?
得到完全相同的問題。我發現在xib視圖中將內部視圖的translatesAutoresizingMaskIntoConstraints設置爲NO,或者通過覆蓋該方法來修復問題。但是現在我在運行時會收到關於缺少約束的警告。 – Matt