web-dev-qa-db-fra.com

Espace blanc ajouté dans UIWebview - suppression des espaces blancs UIWebView dans iOS7 et iOS8

Je charge des fichiers html locaux, depuis iOS7 il y a un espace blanc ajouté en haut dans l'UIWebView. (Je ne peux pas poster une image car je n'ai pas assez de points.) l'image peut être vue ici - snap tiré du simulateur iPhone, uiwebview entouré d'un cadre noir, le contenu html est gris, mais il y a du blanc ajouté au-dessus

J'ai essayé de régler le zoom en utilisant

[webView stringByEvaluatingJavaScriptFromString:@"document. body.style.zoom = 5.0;"];
webView.scalesPageToFit = NO;

J'ai également essayé de supprimer l'espacement des blancs:

 NSString *padding = @"document.body.style.margin='0';document.body.style.padding = '0'";
[webView stringByEvaluatingJavaScriptFromString:padding];

toujours pas de chance. Dans le navigateur de bureau chrome, il n'y a pas d'espace. Les fichiers html sont des fichiers Google Swiffy - contenant html et JSON.

modifier: Image mise à jour

31
DevC

Essayez self.automaticallyAdjustsScrollViewInsets = NO; dans ViewDidLoad.

ios 7 ajoute automatiquement 64 pixels pour la vue de défilement. (barre d'état et barre de navigation)

142
Yiding

Ce problème affecte uniquement le UIWebView s'il s'agit de la première sous-vue de la vue parent. Une autre façon de contourner ce problème consiste à ajouter une autre vue vide non visible à la vue parent en tant que première vue. Dans Interface Builder, ajoutez une sous-vue de taille nulle et utilisez la commande de menu Éditeur-> Réorganiser-> Arrière-plan.

Si vous n'utilisez pas Interface Builder, mais que vous sous-classez plutôt le UIWebView, cela peut être fait en créant une variable d'instance UIView appelée scrollFixView et en remplaçant les méthodes suivantes:

- (void)didMoveToSuperview
{
  [super didMoveToSuperview];

  if ([self superview].subviews.firstObject == self) {
    _scrollFixView = [[UIView alloc] initWithFrame:CGRectMake(0, 0, 0, 0)];
    _scrollFixView.hidden = YES;
    [[self superview] insertSubview:_scrollFixView belowSubview:self];
  }
}

- (void)removeFromSuperview
{
  if (_scrollFixView) {
    [_scrollFixView removeFromSuperview];
    _scrollFixView = nil;
  }

  [super removeFromSuperview];
}
5
ThomasW

J'ai eu le même problème alors j'ai essayé quelques trucs :-)

Cela a fonctionné pour moi, mais corrigez-moi s'il vous plaît s'il y a une meilleure façon.

-(void)webViewDidFinishLoad:(UIWebView *)webView
 {
   if(self.navigationController.navigationBar.translucent == YES)
   {

    _webView.scrollView.contentOffset = CGPointMake(_webView.frame.Origin.x, _webView.frame.Origin.y - 54);

   }
 }

Donc, fondamentalement, vous devez:

1) Ajoutez la méthode déléguée UIWebView - webViewDidFinishLoad: 2) Ensuite, je configure une instruction if pour vérifier si l'option translucide est active.

Le dernier que vous devez seulement faire bien sûr si vous donnez à l'utilisateur l'option dans votre application. Le nombre après le _webView.frame.Origin.y est juste pour mon application. Cela peut différer pour vous.

3
jwknz

J'ai résolu ce problème en définissant simplement une contrainte sur WebView, en définissant l'espace supérieur entre celui-ci et le haut de la vue sur 0, ce qui a pour effet que la barre de navigation chevauche l'espace blanc.

1
Iyashu5040

Une alternative à la méthode de Jeff Kranenburg est de sous-classer et de remplacer la méthode UIWebView des sous-classes UIScrollViewDelegatescrollViewDidScroll:. Cela n'est approprié que si le défilement est désactivé pour votre sous-classe.

- (void)scrollViewDidScroll:(UIScrollView *)scrollView
{
  if ([[self superclass] instancesRespondToSelector:_cmd]) {
    [super scrollViewDidScroll:scrollView];
  }

  [self fixUpScrollViewContentOffset];
}

- (void)fixUpScrollViewContentOffset
{
  if (!CGPointEqualToPoint(self.scrollView.contentOffset, CGPointZero)) {
    self.scrollView.contentOffset = CGPointZero;
  }
}
0
ThomasW

Je l'ai déjà .

ici mon code logique, lorsque l'application ouvre le site Web, vous devez obtenir la taille de votre vue Web puis la définir sur la hauteur

ici mon code

     ViewGroup.MarginLayoutParams p = (ViewGroup.MarginLayoutParams) webpage.getLayoutParams();
            p.height = webpage.getHeight();
// check if how long you need to set your height for webpage then set it :)
            Log.e(" webpage.getHeight()", String.valueOf(webpage.getHeight()));
            webpage.setLayoutParams(p);

J'espère que vous prendrez mon code et ma réponse à :) fonctionne sur tous les appareils, même sur les onglets :)

0
Jude Bautista