iPhone - автоматическое изменение размера содержимого UIWebView не помещается в кадр - PullRequest
27 голосов
/ 23 апреля 2011

Я генерирую UIWebView в своем методе viewDidLoad, с небольшим размером (скажем, что-то вроде 50x70).А потом я положил его в супер UIView.

Я бы хотел, чтобы его содержимое соответствовало фрейму webView.Чтобы сделать это, я написал:

        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*/];

Но при этом веб-страница не изменяется в фрейме UIWebView.Кажется, он масштабируется до чего-то другого, меньше, чем кадр суперпредставления, и шире, чем кадр веб-просмотра.

enter image description here

Если я установлю размер кадра веб-просмотра на размер всего суперпредставления,все в порядке.
Как я могу заставить веб-контент (реальный www-контент) соответствовать рамке "уменьшенного" UIWebView?

Ответы [ 7 ]

44 голосов
/ 23 апреля 2011

Ответ: вы уже делаете это, но есть ограничения.

Посмотрите на следующие снимки экрана:

Screeshot 1, scalePageToFit YES и NO

Оба веб-просмотра имеют одинаковую ширину.В нижней части страница идеально вписывается.

enter image description here

Screeshot 2, scalePageToFit оба ДА, но меньшие ширины установлены

Оба веб-просмотра пытаютсяпо размеру страницы, но это не так, поскольку существует ограничение размера.

enter image description here

2 голосов
/ 12 января 2017

Попробуй это. Это работает для меня.

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];
2 голосов
/ 09 сентября 2013

Для тех, кто сталкивался с той же проблемой, вы можете отключить встроенную прокрутку UIWebView с помощью

self.webView.scrollView.scrollEnabled = NO;

и добавить отдельный scrollView, который будет обрабатывать прокрутку и масштабирование вместо встроенной webView.прокрутки.Затем установите

- (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;
}

, чтобы установить правильный кадр webView.Надеюсь, это кому-нибудь поможет.Хорошее кодирование!

0 голосов
/ 14 августа 2017

Для Swift 3 я добился того же с

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)
                }
            }
0 голосов
/ 14 июня 2016

Для Swift 2.2 Я достиг того же с

//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)
0 голосов
/ 09 июля 2013

Попробуйте:

[oneView setScalesPageToFit:YES];

... вместо:

oneView.scalesPageToFit = YES;

Надеюсь, это поможет.

0 голосов
/ 23 апреля 2011

Вы можете сделать следующее:

oneview.contentMode = UIViewContentModeScaleAspectFit;

Это увеличит содержание вашего представления по мере его роста. Контент будет расти настолько большим, насколько это возможно, в то же время вписываясь в UIWebView и без искажений.

Существуют и другие параметры для этого свойства, и вы найдете довольно хорошее объяснение более сложных, наряду с изображениями, показывающими эффект каждого из них, в Просмотр руководства по программированию для iOS

Обратите внимание, что маска автоматического изменения размера, которую вы устанавливаете, заставит само представление расти только тогда, когда увеличивается его суперпредставление. Если self.view уже велико, когда создается маленький UIWebView, а self.view не увеличивается, UIWebView не будет расти. Вы, вероятно, знаете об этом, но я добавляю это на всякий случай, так как мы не можем видеть кадр self.view в этом фрагменте кода.

Надеюсь, это полезно.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...