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. Кажется, что он масштабируется на что-то еще, меньшее, чем рамка супервизора, и шире, чем у веб-представления.

введите описание изображения здесь

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


person Oliver    schedule 23.04.2011    source источник
comment
Можете ли вы переключить строку loadRequest на строку addSubview? Можете выложить скриншот? Выглядит ли размер хорошо, если вы изначально установите рамку веб-просмотра на рамку супервизора?   -  person Nick Weaver    schedule 23.04.2011
comment
Добавлен ответ, объясняющий проблему.   -  person Nick Weaver    schedule 23.04.2011


Ответы (8)


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

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

Screeshot 1, scalePageToFit ДА и НЕТ

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

введите описание изображения здесь

Screeshot 2, scalePageToFit и YES, но меньшая ширина

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

введите описание изображения здесь

person Nick Weaver    schedule 23.04.2011
comment
Можно ли сделать снимок контента, графически изменить его размер, а затем отобразить? - person Oliver; 23.04.2011
comment
Да, можно, это довольно просто: посмотрите Как получить UIImage из снимка экрана UIWebView - person Nick Weaver; 23.04.2011

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

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];
person Rajni Johar Raswant    schedule 12.01.2017

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

person zshcbka    schedule 09.09.2013

Используйте sizethatfits() в веб-просмотре, чтобы решить вашу проблему.

person cruzier    schedule 20.11.2019

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

oneview.contentMode = UIViewContentModeScaleAspectFit;

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

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

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

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

person salo.dm    schedule 23.04.2011
comment
что за рамка self.view? - person salo.dm; 23.04.2011
comment
Обратите внимание, что есть также свойство UIWebView, которое вы можете установить следующим образом: oneView.scalesPageToFit = YES - person salo.dm; 23.04.2011
comment
лол, извини, пропустил. Возможно, неправильно прочитал ваш вопрос, подумал, что ваша проблема связана с изменением размера веб-представления. - person salo.dm; 23.04.2011

Для 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)
person swiftBoy    schedule 14.06.2016

Для 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)
                }
            }
person Lion    schedule 14.08.2017

Попробуй это:

[oneView setScalesPageToFit:YES];

... вместо:

oneView.scalesPageToFit = YES;

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

person Pavel Kanapatski    schedule 09.07.2013
comment
Это точно то же самое - person Accatyyc; 20.01.2014