【发布时间】:2010-10-10 00:06:51
【问题描述】:
如何增加或减少UIWebview字体大小,不使用scalePageToFit:NO;
【问题讨论】:
标签: iphone objective-c cocoa-touch uiwebview
如何增加或减少UIWebview字体大小,不使用scalePageToFit:NO;
【问题讨论】:
标签: iphone objective-c cocoa-touch uiwebview
我有 2 个按钮 - A- 和 A+
@interface
NSUInteger textFontSize;
- (IBAction)changeTextFontSize:(id)sender
{
switch ([sender tag]) {
case 1: // A-
textFontSize = (textFontSize > 50) ? textFontSize -5 : textFontSize;
break;
case 2: // A+
textFontSize = (textFontSize < 160) ? textFontSize +5 : textFontSize;
break;
}
NSString *jsString = [[NSString alloc] initWithFormat:@"document.getElementsByTagName('body')[0].style.webkitTextSizeAdjust= '%d%%'",
textFontSize];
[web stringByEvaluatingJavaScriptFromString:jsString];
[jsString release];
}
【讨论】:
textFontSize 设置为初始值(可能为 100)。
...style.fontSize(或其他CSS属性)。在我的情况下,这意味着我不必在会话之间将比例转换回适当的字体大小。
- (void)webViewDidFinishLoad:(UIWebView *)webView
{
NSString *fontSize=@"143";
NSString *jsString = [[NSString alloc] initWithFormat:@"document.getElementsByTagName('body')[0].style.webkitTextSizeAdjust= '%d%%'",[fontSize intValue]];
[myWebview stringByEvaluatingJavaScriptFromString:jsString];
}
【讨论】:
目前没有直接在 UIWebView 中操作 DOM 的公开方法,也没有任何方便的方法来处理诸如字体大小之类的事情。我建议提交Radars。
话虽如此。您可以通过更改 CSS 来修改字体大小,就像任何其他网页一样。如果这是不可能的(你不控制内容),你可以编写一个小的 javascript 函数来更改页面 DOM 中的 CSS 属性,并通过调用来执行它:
- (NSString *)stringByEvaluatingJavaScriptFromString:(NSString *)script;
【讨论】:
斯威夫特 3
public func webViewDidFinishLoad(_ webView: UIWebView) {
let textSize: Int = 300
webView.stringByEvaluatingJavaScript(from: "document.getElementsByTagName('body')[0].style.webkitTextSizeAdjust= '\(textSize)%%'")
}
老斯威夫特:
func webViewDidFinishLoad(webView: UIWebView) {
let textSize: Int = 300
webView.stringByEvaluatingJavaScriptFromString("document.getElementsByTagName('body')[0].style.webkitTextSizeAdjust= '\(textSize)%%'")
}
【讨论】:
webView.stringByEvaluatingJavaScript(from: "document.getElementsByTagName('body')[0].style.webkitTextSizeAdjust= '\(textSize)%%'")
Swift 5 更新。 这是来自@BLCs 建议的更新答案。
还修复了他的字符串中的双 %%。
func webView(_ webView: WKWebView, didFinish navigation: WKNavigation!) {
let textSize = 300
let javascript = "document.getElementsByTagName('body')[0].style.webkitTextSizeAdjust= '\(textSize)%'"
webView.evaluateJavaScript(javascript) { (response, error) in
print()
}
}
【讨论】:
试试下面的代码:
NSString *setTextSizeRule = [NSString stringWithFormat:@"addCSSRule('body', '-webkit-text-size-adjust: %d%%;')",currentTextSize];
[_webview stringByEvaluatingJavaScriptFromString:setTextSizeRule];
【讨论】:
这是我在 UIWebView 中更改字体大小和颜色的:
NSString *myString=@"Hello World!";
int textFontSize=2;
NSString *myHTML=[NSString stringWithFormat: @"<html><body><script>var str = '%@'; document.write(str.fontsize(%d).fontcolor('green'));</script></body></html>",myString,textFontSize];
[myWebView loadHTMLString:myHTML baseURL:nil];
【讨论】:
试试这个简单的方法
- (void)webViewDidFinishLoad:(UIWebView *)webView
{
int fontValue = 150;
NSString *webviewFontSize = [NSString stringWithFormat:@"addCSSRule('body', '-webkit-text-size-adjust: %d%%;')",fontValue];
[your_webview stringByEvaluatingJavaScriptFromString:webviewFontSize];
}
【讨论】:
在我的情况下,我使用 UISlider 作为 fontSize,可以是任何浮点值
func webViewDidFinishLoad(_ webView: UIWebView) {
if let fontSize: Float = (self.fontSizeSlider?.value) {
webView.stringByEvaluatingJavaScript(from: "document.getElementsByTagName('body')[0].style.webkitTextSizeAdjust= '\(fontSize)%%'")
print(fontSize)
}
}
【讨论】:
在 SWIFT 中 -
let fontSize = 20
let fontSetting = "<span style=\"font-size: \(fontSize)\"</span>"
webView.loadHTMLString( fontSetting + myHTMLString, baseURL: nil)
【讨论】:
通过在方法中将获取的 html 字符串中出现的字体大小更改为所需的字体大小(本示例中为 40)来更改获取的 HTML 数据的字体大小。
strHtml = [self htmlEntityDecode:strHtml];//parsing the html string
-(NSString *)htmlEntityDecode:(NSString *)string
{
string = [string stringByReplacingOccurrencesOfString:@"14px;" withString:@"40"];
string = [string stringByReplacingOccurrencesOfString:@"15px;" withString:@"40"];
string = [string stringByReplacingOccurrencesOfString:@"16px;" withString:@"40"];
string = [string stringByReplacingOccurrencesOfString:@"17px;" withString:@"40"];
string = [string stringByReplacingOccurrencesOfString:@"18px;" withString:@"40"];
string = [string stringByReplacingOccurrencesOfString:@"19px;" withString:@"40"];
string = [string stringByReplacingOccurrencesOfString:@"20px;" withString:@"40"];
return string;
}
所以 html 字符串: 跨度样式='字体大小:20px; 变成: span style='font-size: 40
注意:更改其他匹配项,例如 gt;、apos;也可以将所需的字符串加载到您的 Webview 中。
【讨论】: