2017-01-17 2 views
0

J'ai une vue éclatée qui ressemble à:Impossible de masquer NSSplitView divider

| source | filtrer | liste | détails |

Je veux cacher programmation le filtre donc dans mon délégué NSSplitView J'utilise

-(BOOL)splitView:(NSSplitView *)splitView shouldHideDividerAtIndex:(NSInteger)dividerIndex 

Pour masquer la section de filtre J'utilise

[[[[self splitView] subviews] objectAtIndex:1] setHidden:YES]; 
[[self splitView] adjustSubviews]; 

avant de se cacher: enter image description here Après avoir caché: enter image description here

J'ai fait les diviseurs rouges dans ma sous-cla ss pour voir plus facilement ce qui se passe. Les deux diviseurs sont toujours là, juste l'un à côté de l'autre, mais celui de droite devrait disparaître complètement.

Est-ce que cela se produit parce que j'essaie de cacher une sous-vue qui n'est pas au bord? Peut-être que cela ne fonctionne que pour l'index 0 et max?

Comment est-ce que je peux faire ce travail?

Répondre

0

Vous voulez probablement juste définir la position correcte du diviseur:

splitView.setPosition(splitView.bounds.width, ofDividerAtIndex: 0) 

et passer outre aussi une autre méthode déléguée pour permettre le repliage votre point de vue:

func splitView(splitView: NSSplitView, canCollapseSubview subview: NSView) -> Bool { 
    //You may choose which view you allow to collapse here... 
    return true 
} 

func splitView(splitView: NSSplitView, shouldHideDividerAtIndex dividerIndex: Int) -> Bool { 
    return true 
} 

J'ai créé un projet de test pour vous ici:

https://github.com/emankovski/CollapseSplitViews

+0

Merci pour cela. Je vais y jeter un coup d'oeil. – Trygve

+0

Non - cela ne l'affecte pas. J'ai aussi un problème avec les objets dans la vue repliée obtenant leurs contraintes de positionnement probablement parce que la largeur va à zéro. – Trygve