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
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)
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];
}
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.
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.
Une alternative à la méthode de Jeff Kranenburg est de sous-classer et de remplacer la méthode UIWebView
des sous-classes UIScrollViewDelegate
scrollViewDidScroll:
. 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;
}
}
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 :)