2009-10-13 8 views
1

J'ai donc un projet qui a du contenu affiché dans un WebView et je veux rester au-dessus de ça. Je veux que l'en-tête fasse défiler avec le contenu WebView. Maintenant, WebView veut généralement le faire de son propre traitement de défilement mais vous pouvez lui dire de ne pas en utilisant:Comment intégrer un WebView dans un NSScrollView?

[[webView mainFrame] setAllowsScrolling:NO]; 

ce qui rend les barres de défilement de la WebView ne pas apparaître avec succès. Cependant, malgré le fait qu'il soit incorporé dans NSScrollView, les barres de défilement de NSScrollView ne s'activent jamais. Je peux seulement conclure que le WebView doit être dit de redimensionner, mais je ne peux pas comprendre comment faire cela. J'ai essayé ce qui suit:

NSRect webViewBounds = [webView bounds]; 
[webView setFrameSize:webViewBounds.size]; 

mais cela ne semble pas fonctionner non plus.

Des suggestions?

Répondre

0

Solution alternative: Qu'en est-il de l'expression de l'en-tête en HTML/CSS/JavaScript et de la mise en place du contenu réel dans un iframe? Vous pouvez parcourir la hiérarchie des cadres pour trouver l'objet WebFrame pour ce cadre et utiliser le DOM (peut-être enveloppé par un de vos propres objets) pour contrôler l'en-tête.

+0

Ouais, je pensais essayer ça. On dirait un kludge mais si c'est ce qu'il faut ... =) – Benno

0

J'ai jeté un coup d'œil sur les documents pour cela, probablement une question idiote; Après avoir modifié la taille de l'image, envoyez-vous un message setNeedsDisplay à la vue?

+0

Oui, je suis. Aucune différence. Je suppose que le problème est peut-être que le WebView est dimensionné en fonction de la taille que je lui ai donnée dans Interface Builder. Je ne suis pas sûr de savoir comment le dire, il peut être aussi grand qu'il le veut, ni comment savoir à quel point il pourrait être donné au contenu. Je pourrais juste essayer de lui donner une énorme taille verticale et voir comment ça se passe. – Benno

0

Les limites et le cadre de votre code doivent avoir la même taille. Mettre l'un à l'autre ne change rien.

Aujourd'hui j'ai joué un peu avec la classe WebView. Avec mon approche, vous n'aurez pas à ajouter votre en-tête au code HTML. L'inscription à une notification vous donne un point de départ:

[[NSNotificationCenter defaultCenter] addObserver:self 
    selector:@selector(webViewDidScroll:) 
    name:NSViewBoundsDidChangeNotification object:nil]; 

Ensuite, vous pouvez vérifier la classe de l'expéditeur de la notification (supposons que vous avez seulement un WebView):

- (void)webViewDidScroll:(NSNotification *)aNotification 
{ 
    if ([[aNotification object] isKindOfClass:NSClassFromString(@"WebClipView")]) 
    { 
    // Do whatever you like; scroll your header etc. 
    } 
}