J'ai placé une instance de la classe personnalisée BigView
qui est une sous-classe de NSView
à l'intérieur d'un NSScrollView
dans IB. La taille du contenu de mon BigView
sera calculée lors de l'exécution. Quelles sont les meilleures pratiques pour définir la taille du contenu?Pourquoi ne pas remplacer `intrinsicContentSize` dans` NSView` pour `NSScrollView`?
Redéfinition intrinsicContentSize
, comme suggéré dans le guide Ranch Big Nerd, ne pas semblent fonctionner - le cadre reste à sa taille d'origine:
class BigView: NSView {
...
override var intrinsicContentSize: NSSize { // doesn't work?!
return NSSize(width: 10000, height: 10000)
}
...
}
Réglage du cadre par programme (ou IB) fonctionne:
class BigView: NSView {
...
override func awakeFromNib() {
...
self.frame = NSRect(x: 0, y: 0, width: 10000, height: 10000)
}
...
}I
ou du contrôleur:
class ViewController: NSViewController {
@IBOutlet weak var bigView: BigView!
...
override func viewDidLoad() {
super.viewDidLoad()
bigView.frame = NSRect(x: 0, y: 0, width: 1000, height: 1000)
}
...
}
Cela peut aussi être effectué tout au long de la propriété documentView
scrollview:
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)
}
...
}
Je suppose que l'on pourrait aussi utiliser des contraintes aussi bien en forme automatique.
Ce qui ne surcharge pas intrinsicContentSize
fonctionne?
Vous avez exactement le même problème. J'ai trouvé la définition de translatesAutoresizingMaskIntoConstraints sur la vue interne à NO sur la vue dans le xib ou en remplaçant la méthode résout le problème. Mais maintenant, je reçois un avertissement à l'exécution sur les contraintes manquantes. – Matt