2013-04-05 5 views
7

Ich habe jede Permutation ausprobiert, die der Menschheit bekannt ist, und ich kann kein UIWebView richtig in einer modalen Formansicht für das iPad sortieren. Die Webseite zeigt weiterhin die volle Breite des iPad-Portraits von 768 Punkten an.Wie Größe UIWebView in einem UIModalPresentationFormSheet?

Wo und wie sage ich UIWebView, Breite 540 Punkte anzuzeigen?

Ich dachte 'ScalesPageToFit' soll dies tun, aber es funktioniert nicht.

Ich habe versucht, die Webansicht auf die Größe der Formularansicht einzustellen, die 540 x 576 mit Navigation und Statusleiste ist. Die Höhe ist jedoch irrelevant.

Ich habe versucht, ein UIWebView zu einem UIView in einem Storyboard mit allen Größenanpassung Set hinzuzufügen. Ich habe dann das UIWebView entfernt und programmgesteuert hinzugefügt.

- (void)viewDidLoad 
{ 
    [super viewDidLoad]; 

    CGRect aFrame = self.view.frame; 

    if (IS_IPAD) 
    { 
     aFrame = CGRectMake(0, 0, FORM_VIEW_WIDTH, FORM_VIEW_HEIGHT); 
    } 

    _webView = [[UIWebView alloc] initWithFrame:aFrame]; 
    [_webView setOpaque:NO]; 
    [_webView setDelegate:self]; 
    [_webView setScalesPageToFit:YES]; 

    self.view = _webView; 
    ... 
} 

Ich habe auch versucht, in viewDidAppear (zusätzlich zu viewDidLoad, viewWillAppear, etc.) Laden

- (void)viewDidAppear:(BOOL)animated 
{ 
    [super viewDidAppear:animated]; 

    [[self webView] setFrame:CGRectMake(0, 0, FORM_VIEW_WIDTH, FORM_VIEW_HEIGHT)]; 
    [[self webView] setScalesPageToFit:YES]; 

    NSURL *webURL = [NSURL URLWithString:@"http://www.google.com"]; 
    NSURLRequest *request = [NSURLRequest requestWithURL:webURL cachePolicy:NSURLRequestUseProtocolCachePolicy timeoutInterval:5.0f]; 
    [[self webView] loadRequest:request]; 
} 

Irgendwelche geschätzt Empfehlungen.

enter image description here

Antwort

3

Das hält mir passiert. Ich poste eine lange Frage, dann finde ich zwei Sekunden später die Antwort.

Wie dem auch sei, geschrieben jemand eine Lösung für dieses Problem hier: UIWebView -- load external website, programmatically set initial zoom scale, and allow user to zoom afterwards

Allerdings habe ich verändert das Skript die Breite auf dem iPad Breite einzustellen:

- (void)webViewDidFinishLoad:(UIWebView *)webView 
{ 
    NSString* js = 
    @"var meta = document.createElement('meta'); " 
    @"meta.setAttribute('name', 'viewport'); " 
    @"meta.setAttribute('content', 'width = 540px, initial-scale = 1.0, user-scalable = yes'); " 
    @"document.getElementsByTagName('head')[0].appendChild(meta)"; 

    [[self webView] stringByEvaluatingJavaScriptFromString: js]; 
} 

Hinweis der Abschnitt ‚width = 540px , initial-scale = 1.0, benutzerdefinierbar = ja '

Ich habe die Breite auf die Formbreite geändert und skaliere auf 1.0.

Ich muss auch mit dem iPhone umgehen, und so werde ich für die nächsten Anpassungen vornehmen. Ich denke, dass diese Korrektur möglicherweise nur für die iPad-Formularansicht benötigt wird.

UPDATE: Die Antwort ist von kurzer Dauer. Wenn ich eine andere Seite lade, wird das Sizing wieder verworfen. Zurück zum Anfang.

LÖSUNG: Diese Ansicht muss nur auf einige Webseiten zugreifen, die ich entwickelt habe. Daher habe ich die wenigen Webseiten aktualisiert, auf die ich zugreifen muss, indem ich ihnen jeweils das Meta-Tag hinzufüge. Ich muss nur auf diese Seiten zugreifen und das ist die Lösung, mit der ich vorgehe. Das bedeutet, dass ich die Ansichtsfensterbreite nur für das iPad auf 540 Pixel einstellen muss. Ich werde das als nächstes herausfinden.

+0

Meine aktuelle Implementierung ist, dass ich ein Python-Skript geschrieben habe, um Zielseiten von Quellseiten als help_ipad.html zu analysieren und zu generieren, auf die in der Formularansicht auf dem iPad zugegriffen wird. – Christopher

+0

Ein Punkt, den ich beachten sollte: Wenn Sie das Bildfenster nicht löschen, das ich beim Drehen der App gefunden habe, werden die angewendeten Attribute gelöscht. Sie können das Ansichtsfenster löschen, indem Sie zuerst dieses Skript ausführen: [webView stringByEvaluatingJavaScriptFromString: @ "$ ('meta [name = viewport]'). Remove();"]; – Vlad

Verwandte Themen