Проблема с полосой прокрутки UIWebView - PullRequest
1 голос
/ 12 ноября 2009

Я использую UIWebView для доступа к веб-сайту, когда я поворачиваю телефон (альбомная ориентация), размер UIWebView корректно изменяется, а полоса прокрутки находится в нужном месте (на правом краю ...), но когда я получаю доступ к любому из полей ввода чтобы заполнить требуемую информацию и выйти из нее, полоса прокрутки UIWebView переходит в середину экрана (похоже, она вернулась к 320, ширина экрана на портретной). Немного полезной информации, эта программа была создана с использованием IB, у нее много выходов, я думаю об этом (делаю) все программно, потому что я не был автором первой версии ... Если кто-нибудь видел это раньше, пожалуйста, дайте мне знать. .

Заранее спасибо!

Ответы [ 5 ]

2 голосов
/ 25 июня 2010

Не добавляйте свое веб-представление в self.view, просто назначьте его. Простая вещь работает как удивительная

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

[self.view addSubview: wv];

вместо

self.view = wv;

1 голос
/ 28 ноября 2009

В моем тестовом примере я обнаружил, что могу воспроизвести эту проблему, зайдя на веб-сайт, который принимает ввод, вызывает клавиатуру, закрывает клавиатуру (с вводом или без ввода), и теперь отображение вертикальной полосы прокрутки находится на Портретная позиция.

Я проверил с и без NIB, и результаты согласуются. После вызова клавиатуры вертикальная полоса прокрутки останется с книжными координатами, когда телефон (или симулятор) находится в ландшафтном режиме.

Я представил дело № 7428286.

0 голосов
/ 06 февраля 2010

Я столкнулся с той же проблемой, но я установил рамку веб-просмотра в

- (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;
    }
}
0 голосов
/ 19 ноября 2009

Я получил ответ от Apple о возможной сообщенной ошибке, они попросили образец кода, который может воспроизвести проблему, я отправил им и я публикую его здесь, чтобы вы тоже могли проверить:

//
//  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
0 голосов
/ 13 ноября 2009

Я сообщил об ошибке на begreport.apple.com об этой проблеме.

И сегодня (21.04.2010) получил ответ!

"Привет, Пауло,

Это продолжение идентификатора ошибки # 7392537. Инженерные специалисты считают, что эта проблема была устранена в iPhone OS 4.0 beta seed 2. (8A248c)

После установки программного обеспечения iPhone OS 4.0b2 обновите этот отчет об ошибках с вашими результатами.

Спасибо за ваше время. Мы искренне ценим вашу помощь в обнаружении и обнаружении ошибок. С наилучшими пожеланиями,

Патрик Коллинз Apple Developer Connection Отношения с разработчиками по всему миру "

...