Подтвердить что ты не робот

IPhone - Автоматическое изменение размера содержимого UIWebView не соответствует рамке

Я создаю 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

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

4b9b3361

Ответ 1

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

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

Screeshot 1, scalesPageToFit YES и NO

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

enter image description here

Screeshot 2, scalesPageToFit и YES, но меньшие ширины установлены

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

enter image description here

Ответ 2

Для тех, кто столкнулся с такой же проблемой, вы можете отключить собственную прокрутку 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. Надеюсь, это поможет кому-то. Хорошее кодирование!

Ответ 3

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

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

Ответ 4

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

oneview.contentMode = UIViewContentModeScaleAspectFit;

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

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

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

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

Ответ 5

Для 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)

Ответ 6

Для 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)
                }
            }

Ответ 7

Попробуйте следующее:

[oneView setScalesPageToFit:YES];

... вместо:

oneView.scalesPageToFit = YES;

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