Je génère un UIWebView dans ma méthode viewDidLoad, avec une taille minuscule (disons quelque chose comme 50x70). Et puis je le mets dans un super UIView.
J'aimerais que son contenu corresponde au cadre webView. Pour ce faire, j'ai écrit:
oneView = [[UIWebView alloc] initWithFrame:CGRectMake(x, y, W, H)];
oneView.backgroundColor = [UIColor whiteColor];
oneView.autoresizingMask = UIViewAutoresizingFlexibleWidth;
oneView.scalesPageToFit = YES;
oneView.autoresizesSubviews = YES;
[self.view addSubview:oneView];
[oneView loadRequest:/*some request*/];
Mais pour ce faire, la page Web n'est pas redimensionnée par rapport au cadre de UIWebView . Elle semble être redimensionnée à autre chose, plus petite que celle de la vue supérieure et plus large que celle de la vue Web.
Si je règle la taille du cadre de la webview à la taille de la vue d'ensemble, ça va.
Comment puis-je forcer le contenu Web (contenu réel de www) à s’ajuster au cadre de la UIWebView "réduite"?
La réponse est: vous le faites déjà mais il y a des limites.
Regardez les captures d'écran suivantes:
Screeshot 1, scalePageToFit OUI et NON
Les deux webview ont la même largeur. Dans la partie inférieure, la page s’adapte parfaitement.
Screeshot 2, scalePageToFit les deux OUI, mais de plus petites largeurs définies
Les deux visionneuses Web tentent de s’ajuster à la page, mais ce n’est pas le cas, car la taille est limitée.
Essayez ceci. Cela fonctionne pour moi.
NSString *strTemplateHTML = [NSString stringWithFormat:@"<html><head><style>img{max-width:100%%;height:auto !important;width:auto !important;};</style></head><body style='margin:0; padding:0;'>%@</body></html>", @"insert your html content here"];
[webView loadHTMLString:strTemplateHTML baseURL:nil];
Pour ceux qui ont rencontré le même problème, vous pouvez désactiver le défilement natif UIWebView en
self.webView.scrollView.scrollEnabled = NO;
et ajoutez une scrollView
distincte qui gérera le défilement et le zoom au lieu du défilement natif de webView
. Suivant
- (void) webViewDidFinishLoad:(UIWebView *)webView
{
CGRect frame = _webView.frame;
CGSize fittingSize = [_webView sizeThatFits:_webView.scrollView.contentSize];
frame.size = fittingSize;
_webView.frame = frame;
self.scrollView.contentSize = self.webView.scrollView.contentSize;
}
pour définir webView
frame .. Espérons que cela aide quelqu'un. Bon codage!
Vous pouvez faire ce qui suit:
oneview.contentMode = UIViewContentModeScaleAspectFit;
Cela fera croître le contenu de votre vue à mesure que votre vue grandit. Le contenu deviendra aussi volumineux que possible tout en s'intégrant parfaitement dans UIWebView et sans distorsion.
Il existe d'autres options pour cette propriété, et vous trouverez une assez bonne explication des plus compliquées, ainsi que des images illustrant leurs effets, dans le Afficher le guide de programmation pour iOS
Notez que le masque de redimensionnement automatique que vous avez défini fera croître la vue elle-même uniquement lorsque sa vue d'ensemble augmente. Si self.view est déjà important lors de la création de la petite UIWebView et que l'auto.view ne se développe pas, UIWebView ne se développera pas. Vous êtes probablement au courant de cela, mais je l'ajoute au cas où, car nous ne pouvons pas voir le cadre de self.view dans cet extrait de code.
J'espère que c'est utile.
Pour Swift 2.2 J'ai réalisé la même chose avec
//Document file url
var docUrl = NSURL(string: "https://www.google.co.in/url?sa=t&rct=j&q=&esrc=s&source=web&cd=1&ved=0ahUKEwjjwPSnoKfNAhXFRo8KHf6ACGYQFggbMAA&url=http%3A%2F%2Fwww.snee.com%2Fxml%2Fxslt%2Fsample.doc&usg=AFQjCNGG4FxPqcT8RXiIRHcLTu0yYDErdQ&sig2=ejeAlBgIZG5B6W-tS1VrQA&bvm=bv.124272578,d.c2I&cad=rja")
let req = NSURLRequest(URL: docUrl!)
webView.delegate = self
//here is the sole part
webView.scalesPageToFit = true
webView.contentMode = .ScaleAspectFit
webView.loadRequest(req)
Pour Swift 3, j'ai réalisé la même chose avec
DispatchQueue.main.async {
if let finalURL = URL(string: urlString) {
let request = URLRequest(url: finalURL)
// self.webView.sizeToFit()
self.webView.scalesPageToFit = true
self.webView.contentMode = .scaleAspectFit
self.webView.loadRequest(request)
}
}