Sto avendo un pò di tempo per impostare una semplice visualizzazione divisa. La prima vista divisa è compressa. Devo impostare una larghezza minima per questo. Tutto ciò che vedo online (scarso per NSSplitViewController/NSSplitView) è per Objective-C, mette tutto nell'app delegato e usa XIBs.Impostazione dell'ampiezza minima di NSSplitViews
Ecco lo scenario: Controller di finestra con un seguito a un controller SplitView, che ha due viste divise (2 controller di vista).
Quale oggetto deve avere il NSSplitViewDelegate?
EDIT: Aggiunta di frammento di codice: Per esempio, ho questo:
import Cocoa
class ViewController: NSSplitViewController, NSSplitViewDelegate {
@IBOutlet weak var pdlSplitView: NSSplitView!
override func viewDidLoad() {
super.viewDidLoad()
}
override func splitView(splitView: NSSplitView, constrainMinCoordinate proposedMinimumPosition: CGFloat, ofSubviewAt dividerIndex: Int) -> CGFloat {
return proposedMinimumPosition + 200
}
}
c'è di più che mi manca?
Grazie
UPDATE
Sulla base commenti qui sotto, ho fatto un cambiamento, ma ora ho un sigAbort sulla definizione di classe per l'AppDelegate. Full code
ViewController:
import Cocoa
class ViewController: NSSplitViewController, NSSplitViewDelegate {
@IBOutlet weak var pdlSplitView: NSSplitView!
let publicDataListings : PDL = PDL()
override func viewDidLoad() {
super.viewDidLoad()
// Do any additional setup after loading the view.
self.pdlSplitView.delegate = self
}
override func splitView(splitView: NSSplitView, constrainMinCoordinate proposedMinimumPosition: CGFloat, ofSubviewAt dividerIndex: Int) -> CGFloat {
return proposedMinimumPosition + 200
}
}
SidebarViewController:
import Cocoa
class SidebarViewController: NSViewController {
override func viewDidLoad() {
super.viewDidLoad()
// Do view setup here.
}
}
DatasetViewController:
import Cocoa
class DatasetViewController: NSViewController, NSSplitViewDelegate {
override func viewDidLoad() {
super.viewDidLoad()
// Do view setup here.
}
}
Aggiornamento ho portato via mia abitudine NSSplitViewCont roller class e creato due classi NSSplitView, una con il metodo constraint. Ora, io vedo due subviews, ma sono molto più piccole di quanto dovrebbero essere:
C'è qualcuno a tutti che ha fatto questo con Swift e storyboard?
Si sta utilizzando il layout automatico? Qual è la versione precedente del sistema operativo su cui desideri eseguire la tua app? Se utilizzi il targeting 10.8 o successivo e utilizzi il layout automatico, la visualizzazione divisa rispetterà i vincoli delle sue sottoview. Quindi, la larghezza minima potrebbe essere implicita perché qualcosa all'interno della sottoview ha una larghezza intrinseca e resiste alla compressione e ha vincoli iniziali e finali per la sottoview. Oppure è possibile creare un vincolo di larghezza esplicito nella sottoview che sia maggiore o uguale a qualche costante. –
Sto bene con il targeting 10.10+. Sto provando a farlo in Swift. Ho provato ad applicare i vincoli, ma non si attaccano. So che ora è un mondo mobile, ma diamine, pagherei solo un SplitView Hello World in Swift proprio ora. Poi sarei partito per le gare. –
Se si implementano determinati metodi di delega della vista divisa, la vista divisa non utilizzerà il layout automatico. Vedi le note di rilascio di AppKit per 10.8 per le specifiche. Inoltre, non sono sicuro che i metodi di delega della vista divisa siano compatibili con 'NSSplitViewController'. Se la rimozione di quel metodo di delega non aiuta, mostra i vincoli che hai provato a configurare e come lo hai fatto. –