#ios #iphone #uiwebview #frame #autoresize
#iOS #iPhone #uiwebview #фрейм #автоматическое изменение размера
Вопрос:
Я создаю UIWebView в своем методе viewDidLoad с крошечным размером (скажем, что-то вроде 50×70). А затем я поместил его в super 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.
Кажется, что оно масштабируется до чего-то другого, меньшего, чем фрейм супервизора, и более широкого, чем фрейм webview.
Если я установлю размер фрейма webview равным размеру всего супервизора, все в порядке.
Как я могу заставить веб-контент (реальный контент www) соответствовать фрейму «уменьшенного» UIWebView?
Комментарии:
1. Можете ли вы заменить строку loadRequest на строку addSubview? Можете ли вы опубликовать скриншот? Хорошо ли выглядит размер, если вы изначально установили фрейм webview на фрейм superview?
Ответ №1:
Ответ таков: вы уже делаете это, но есть ограничения.
Посмотрите на следующие скриншоты:
Снимок экрана 1, масштаб страницы соответствует ДА и НЕТ
Оба webview имеют одинаковую ширину. В нижней части страница помещается идеально.
Снимок экрана 2, масштаб страницы соответствует обоим, ДА, но установлена меньшая ширина
Оба webview пытаются уместить страницу, но это не получится, поскольку существует ограничение по размеру.
Комментарии:
1. Возможно ли сделать снимок содержимого, графически изменить его размер, а затем отобразить?
2. Да, вы можете, это довольно просто: посмотрите, как получить UIImage из снимка экрана UIWebView
Ответ №2:
Попробуйте это.У меня это работает.
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];
Ответ №3:
Для тех, кто столкнулся с такой же проблемой, вы можете отключить встроенную прокрутку 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
фрейм.
Надеюсь, это кому-то поможет. Хорошее кодирование!
Ответ №4:
Используйте sizethatfits()
в webview, что решило бы вашу проблему.
Ответ №5:
Вы можете сделать следующее:
oneview.contentMode = UIViewContentModeScaleAspectFit;
Это приведет к увеличению содержимого вашего представления по мере роста вашего представления. Содержимое увеличится настолько, насколько это возможно, при этом все еще вписываясь в UIWebView и без искажений.
Для этого свойства есть другие параметры, и вы найдете довольно хорошее объяснение более сложных из них, наряду с изображениями, показывающими эффект каждого, в руководстве по программированию View для iOS
Обратите внимание, что установленная вами маска автоматического изменения размера приведет к увеличению размера самого представления только при увеличении размера его супервизора. Если self.view уже большой, когда создается маленький UIWebView, а self.view не увеличивается, UIWebView не будет увеличиваться. Вы, вероятно, знаете об этом, но я добавляю это на всякий случай, поскольку мы не можем видеть фрейм self.view в этом фрагменте кода.
Надеюсь, это полезно.
Комментарии:
1. что за фрейм в self.view?
2. Обратите внимание, что также существует свойство UIWebView, которое вы могли бы установить следующим образом: OneView.scalesPageToFit = YES
3. lol, извините, пропустил это. Возможно, я неправильно истолковал ваш вопрос, подумал, что ваша проблема связана с изменением размера веб-представления.
Ответ №6:
Для Swift 2.2 я добился того же с
//Document file url
var docUrl = NSURL(string: "https://www.google.co.in/url?sa=tamp;rct=jamp;q=amp;esrc=samp;source=webamp;cd=1amp;ved=0ahUKEwjjwPSnoKfNAhXFRo8KHf6ACGYQFggbMAAamp;url=http://www.snee.com/xml/xslt/sample.docamp;usg=AFQjCNGG4FxPqcT8RXiIRHcLTu0yYDErdQamp;sig2=ejeAlBgIZG5B6W-tS1VrQAamp;bvm=bv.124272578,d.c2Iamp;cad=rja")
let req = NSURLRequest(URL: docUrl!)
webView.delegate = self
//here is the sole part
webView.scalesPageToFit = true
webView.contentMode = .ScaleAspectFit
webView.loadRequest(req)
Ответ №7:
Для 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)
}
}