在UIWebView中调整文本大小 - Swift 3

7

我有一个问题,需要在UIWebView中调整文本大小,html文件位于bundle中。我已经成功地在obj-c中使用修改后的脚本,但是在使用swift 3时,文字大小没有改变,尽管每次点击button时最佳值都会正确更改。以下是代码 -

import UIKit

class ViewController: UIViewController {

@IBOutlet var resWebView: UIWebView!

@IBOutlet weak var increaseFont: UIBarButtonItem!

@IBOutlet weak var decreaseFont: UIBarButtonItem!


var defaults  = ["textFontSize":40]


@IBAction func fontButtonPressed(sender: UIBarButtonItem) {

    var textFontSize = defaults["textFontSize"]

    switch sender.tag
    {
    case 1 : //when decrease
        textFontSize  = textFontSize! - 10

    case 2 ://when increase
        textFontSize = textFontSize! + 50
    default:
        break
    }

    defaults["textFontSize"] = textFontSize

    print(textFontSize)

    var jsString = "document.getElementsByTagName('body')[0].style.fontSize='\(defaults["textFontSize"])px'"
    resWebView.stringByEvaluatingJavaScript(from: jsString)
}


override func viewDidLoad() {
    super.viewDidLoad()

    let resFilePath = Bundle.main.url(forResource: "ResilienceHandbook", withExtension: "html");

    let resRequest = URLRequest(url: resFilePath!);
    resWebView.loadRequest(resRequest);


    // Do any additional setup after loading the view, typically from a nib.
}

override func didReceiveMemoryWarning() {
    super.didReceiveMemoryWarning()
    // Dispose of any resources that can be recreated.
}

}

任何指针都将不胜感激 - 谢谢。
3个回答

12

由于这是一个网络视图,您可以用“字体大小”属性包装内容。

        let content = "<html><body><p><font size=30>" + webContent + "</font></p></body></html>"
        webView.loadHTMLString(content, baseURL: nil)

请相应地更改大小


3
这个问题在这里已经得到解答:

调整UIWebView文本大小

然而,我将其转换成了Swift3,并在Xcode8上进行了测试。以下是代码:

class ViewController: UIViewController {

@IBOutlet weak var webView: UIWebView!

var defaults  = ["textFontSize":12]

override func viewDidLoad() {
    super.viewDidLoad()

    let url = NSURL(string: "https://dev59.com/OJrga4cB1Zd3GeqPu_3m")


    let urlRequest = NSURLRequest(url: url! as URL)

    webView.loadRequest(urlRequest as URLRequest)

}

func changeWebViewFontSize(zoomInOrZoomOut: Int, webView: UIWebView)
{
    //1 = decreace
    //2 = increace
    var textFontSizeTemp = defaults["textFontSize"]! as Int


    switch zoomInOrZoomOut
    {
    case 1: //when decrease
        textFontSizeTemp  = textFontSizeTemp - 20
    case 2: //when increase
        textFontSizeTemp = textFontSizeTemp + 20
    default:
        break
    }

    defaults["textFontSize"] = textFontSizeTemp


    let jsString = "document.getElementsByTagName('body')[0].style.fontSize='\(textFontSizeTemp)px'"
    webView.stringByEvaluatingJavaScript(from: jsString)
}

//UIButton Action
@IBAction func zoomOutButton_TouchUpInside(_ sender: AnyObject)
{
    changeWebViewFontSize(zoomInOrZoomOut: 1,webView: webView)
}

@IBAction func zoomInButton_TouchUpInside(sender: AnyObject)
{
    changeWebViewFontSize(zoomInOrZoomOut: 2,webView: webView)
}

感谢您的回复,rohit90。脚本与我的原始脚本一样工作,字体大小没有改变,尽管按钮在控制台中显示出来。有趣的是,当使用您脚本中的URL时,我得到一个空白的白屏(带有按钮),而使用捆绑的HTML文件增加大小时,除了控制台记录日志外,什么也不会发生,而减小大小只是在段落之间放置更多的空白,但不会改变字体大小。 - Bowcaps
先试试我在代码中使用的那个URL,看看是否有效。我认为你看到空白屏幕是因为这个URL使用了http而不是https。 - rohit90
是的,允许任意加载修复了白屏问题 - 谢谢。然而文本并没有调整大小,只是在文本行之间添加了空白行,但实际字体仍然保持不变 - 有点困惑? - Bowcaps
更新:在iPhone上运行脚本(您的URL)而不是模拟器后,标题“在uiwebview swift 3中调整文本大小”的响应如所需,即增加和减小大小,但页面的其余部分保持不变,尽管没有添加空白行。 - Bowcaps
这只适用于iPad,而在iPhone上不起作用,有什么原因吗? - Heshan Sandeepa

1
创建一个片段变量,如下所示:
                           let snippet = "<html><head><style>body { font-family: -apple-system, GothamNarrowSSm-Medium; sans-serif;}</style><meta name=\"viewport\" content=\"width=device-width, initial-scale=0.5\"></head><body>\(YOUR_HTML_HERE)</body></html>"

将您的字符串/HTML变量放在YOUR_HTML_HERE处。
设置/替换为您喜欢的字体和缩放比例,初始缩放值为value。
然后将其传递给WKWebView。
yourWebView.loadHTMLString(snippet, baseURL: nil)
完成。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接