J'ai créé un NSScrollView qui contient lui-même une vue NSClippedView en tant que contenu (tout est par défaut, créé par IB). Dans la vue de contenu, il y a la vue de document (par défaut).NSScrollView n'affiche pas la barre de défilement verticale après l'ajout de contenu
Cette fonction NSScrollView est dotée d'une fonction de défilement horizontale désactivée et verticale activée et, plus important encore, de défileurs de masquage automatique activés. Lorsque j'ajoute de nouvelles vues (via le code, l'exécution) à la vue du document, le défileur ne se masque pas automatiquement jusqu'au moment où je redimensionne verticalement la fenêtre (et redimensionne à son tour la vue défilante). 1px est suffisant. Juste la nouvelle peinture de la fenêtre semble suffisante. Ce que je cherche est de déclencher ceci par le code: ainsi quand j'ajoute des vues à la vue de contenu de scrollviews je voudrais que la barre de défilement apparaisse.
int numberOfChildViews = 10; //hard coded for example here
int childViewHeight = 80; //same as above
NSRect rect = NSMakeRect(0, 0, [[self.scrollView contentView] bounds].size.width, [numberOfChildViews*childViewHeight);
[[self.scrollView documentView] setFrame:rect];
[[self.scrollView documentView] setBounds:rect]; //just added to make sure
Puis j'ai ajouté les vues personnalisées à la vue du document, comme:
for (int i=0; i<numberOfChildViews; i++) {
NZBProgressViewController *item = [nzbProgressArray objectAtIndex:i];
int y=i*[[item view] bounds].size.height;
rect= NSMakeRect(0, y, [[scrollView contentView] frame].size.width, [[item view] bounds].size.height);
[[item view] setFrame:rect];
currentPosition++;
}
J'utilise un FlippedView donc l'origine sera affiché dans gaucheen haut, comme ceci:
@interface NSFlippedClipView : NSClipView {
}
@implementation NSFlippedClipView
- (BOOL)isFlipped {
return YES;
}
- (BOOL)isOpaque {
return YES;
}
@end
et a ajouté le code suivant à la awakeFromNib
NSFlippedClipView *documentView = [[NSFlippedClipView alloc] init];
[documentView setAutoresizingMask:NSViewWidthSizable];
[documentView setBackgroundColor:[self.scrollView backgroundColor]];
[self.scrollView setDocumentView:documentView];
[documentView release];
Merci d'avoir répondu. Je vais poster le code ce soir. Ce que je fais est: pendant awakefromnib est mis la vue du document de la scrollview à une surcharge personnalisée de nsclipview, seule la méthode surchargée est IsFlipped, cela se traduira par OUI pour faire l'origine de haut en bas. Cette vue que j'ai appelée NSFlippedClipView Lors de l'ajout de contenu dynamique à la vue du document, je redimensionne la vue du document à: taille verticale de la vue (qui est la "fenêtre" sur le documentview) et le nombre de vues personnalisées hauteur des vues personnalisées. Ce qui semble fonctionner correctement. –
Ceci est une bonne réponse car il n'est pas clair dans la documentation si la vue du document doit être redimensionnée manuellement lors de l'ajout de sous-vues. – Dalmazio