2009-11-12 5 views
1

En utilisant un UIWebView pour accéder à un site Web, lorsque je fais pivoter le téléphone (paysage), UIWebView est correctement redimensionné et la barre de défilement est au bon endroit (sur le bord droit ...) Lorsque j'accède à l'un des champs de saisie pour remplir l'information requise et que je la ferme, la barre de défilement d'UIWebView saute au milieu de l'écran (on dirait qu'elle revient à 320, la largeur de l'écran sur portrait). Quelques informations utiles, ce programme a été créé en utilisant IB, ont beaucoup de points de vente, je ne pense pas à tout faire parce que je n'étais pas l'auteur de la première version ... Si quelqu'un l'a déjà vu avant, faites le moi savoir.Problème avec la barre de défilement d'un UIWebView

Merci d'avance!

Répondre

2

Ne pas ajouter votre WebView dans self.view simplement attribuer chose it.Simple fonctionne comme impressionnant

wv = [[UIWebView alloc] initWithFrame: [[UIScreen mainScreen] applicationFrame]];

[self.view addSubview: wv];

à la place de faire

self.view = wv;

+0

Cela fonctionne! Merci. –

0

J'ai signalé un bug sur begreport.apple.com à propos de ce problème.

Et aujourd'hui (21/04/2010) a obtenu une réponse!

« Bonjour Paulo,

Ceci est un suivi ID Bug # 7392537. ingénierie estime que cette question a été abordée dans l'iPhone OS 4.0 graines bêta 2. (de 8A248c)

Après avoir installé l'iPhone OS logiciel 4.0b2, s'il vous plaît mettre à jour ce rapport de bogue avec vos résultats.

Merci pour votre temps. nous apprécions vraiment votre aide pour nous aider à découvrir et isoler des bogues. Respectueusement,

Pa Trick Collins d'Apple Developer Connection Worldwide Developer Relations »

0

J'ai reçu une réponse d'Apple à propos du bogue possible rapporté, ils ont demandé un exemple de code qui peut reproduire le problème, je leur ai envoyé et im le poster ici, donc vous peut tester aussi:

// 
// viewController.m 
// TesteWebview 
// 
// Created by GecanMobile01 on 13/11/09. 
// Copyright xxx All rights reserved. 
// 

#import "viewController.h" 


@implementation viewController 

@synthesize vw, wv; 

/* 
// The designated initializer. Override if you create the controller programmatically and want to perform customization that is not appropriate for viewDidLoad. 
- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil { 
    if (self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil]) { 
     // Custom initialization 
    } 
    return self; 
} 
*/ 

// Implement loadView to create a view hierarchy programmatically, without using a nib. 
- (void)loadView { 
    vw = [[UIView alloc] initWithFrame:[[UIScreen mainScreen] applicationFrame]]; 
    [vw setBackgroundColor:[UIColor grayColor]]; 
    vw.autoresizesSubviews = YES; 
    self.view = vw; 
    wv = [[UIWebView alloc] initWithFrame:[[UIScreen mainScreen] applicationFrame]]; 

    [self.view addSubview:wv]; 
} 

// Implement viewDidLoad to do additional setup after loading the view, typically from a nib. 
- (void)viewDidLoad { 
    NSURL *urlId = [NSURL URLWithString:@"https://www.google.com"]; 
    NSURLRequest *theRequest = [NSURLRequest requestWithURL:urlId cachePolicy:NSURLRequestReloadIgnoringCacheData timeoutInterval:(NSTimeInterval)10.0]; 
    [wv loadRequest:theRequest]; 
    [super viewDidLoad]; 
} 

// Override to allow orientations other than the default portrait orientation. 
- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation { 
    // Return YES for supported orientations 
    CGRect cgrWebView; 
    BOOL bChangeOrientation = NO; 
    if (interfaceOrientation == UIInterfaceOrientationPortrait || interfaceOrientation == UIInterfaceOrientationLandscapeLeft || interfaceOrientation == UIInterfaceOrientationLandscapeRight){ 
     if (interfaceOrientation == UIInterfaceOrientationPortrait) { 
      cgrWebView = CGRectMake(0.0, 0.0, 320.0, 460.0); 
      bChangeOrientation = YES; 
     } else { 
      cgrWebView = CGRectMake(0.0, 0.0, 480.0, 320.0); 
      bChangeOrientation = YES; 
     } 
     [wv setFrame:cgrWebView]; 
    } 
    return bChangeOrientation; 
} 

- (void)didReceiveMemoryWarning { 
    // Releases the view if it doesn't have a superview. 
    [super didReceiveMemoryWarning]; 

    // Release any cached data, images, etc that aren't in use. 
} 

- (void)viewDidUnload { 
    // Release any retained subviews of the main view. 
    // e.g. self.myOutlet = nil; 
} 


- (void)dealloc { 
    [super dealloc]; 
} 


@end 
1

je trouve que je peux reproduire ce problème en allant sur un site Web qui accepte la saisie, invoquant le clavier, qui avait rejeté le clavier (avec ou sans entrer d'entrée) Dans mon cas de test et maintenant l'affichage de la barre de défilement verticale est en position Portrait. J'ai testé avec et sans NIB et les résultats sont cohérents. Une fois le clavier invoqué, la barre de défilement verticale reste sur les coordonnées Portrait lorsque le téléphone (ou le simulateur) est en mode Paysage.

J'ai présenté le cas n ° 7428286.

0

je faisais face au même problème mais je définir le cadre de la vue sur le Web dans

- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation { 
{ 
BOOL orientation = NO; 
    if(interfaceOrientation == UIInterfaceOrientationPortrait) 
    { 
      [webView setFrame:CGRectMake(0, 0, 320, 480)]; 
      orientation = YES; 
     return orientation; 
     }else if(interfaceOrientation == UIInterfaceOrientationLandscapeRight) 
    { 
      [webView setFrame:CGRectMake(0, 0, 480, 320)]; 
      orientation = YES; 
     return orientation; 
     }else { 
     orientation = NO; 
     return orientation; 
    } 
}