在 UIWebView 中调整文本大小 - Swift 3
Posted
技术标签:
【中文标题】在 UIWebView 中调整文本大小 - Swift 3【英文标题】:Resizing text in UIWebView - Swift 3 【发布时间】:2016-09-22 11:40:23 【问题描述】:我遇到了问题,在 UIWebView
中调整文本大小,html
文件位于捆绑包中。我设法让修改后的脚本在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.
感谢您的指点 - 谢谢
【问题讨论】:
【参考方案1】:由于这是一个网页视图,您可以使用“字体大小”属性包装内容,
let content = "<html><body><p><font size=30>" + webContent + "</font></p></body></html>"
webView.loadHTMLString(content, baseURL: nil)
这里相应地改变大小
【讨论】:
【参考方案2】:这个问题在这里得到解答:
Resizing UIWebView text
但是我将其转换为 Swift3 并在 Xcode8 上进行了测试。代码如下:
类视图控制器:UIViewController
@IBOutlet weak var webView: UIWebView!
var defaults = ["textFontSize":12]
override func viewDidLoad()
super.viewDidLoad()
let url = NSURL(string: "https://***.com/questions/39638019/resizing-text-in-uiwebview-swift-3")
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 文件没有任何反应(除了控制台日志记录)并且减小大小简单会在两者之间放置更多空白空间段落,但不改变字体大小。 首先尝试我在我的代码中使用的那个 URL 让我知道它是否有效,我认为你会因为这个***.com/questions/31254725/…而出现空白屏幕@ 是的,允许任意加载修复了白屏问题 - 谢谢。但是文本没有调整大小,它似乎只是在文本行之间添加了空白行,但实际字体保持固定 - 令人困惑? 更新:在 iPhone 而不是模拟器上运行脚本(您的 URL)后,标题 'Resizing text in uiwebview swift 3' 根据需要响应,即大小增加和减小,但其余部分页面保持不变,但没有添加空行。 这仅适用于 iPad,不适用于 iPhone,有什么原因吗?【参考方案3】:如下创建一个sn-p变量:
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 的位置。
在 initial-scale=value 中设置/替换为您最喜欢的字体和缩放比例。
然后,将其传递给 WKWebView。
yourWebView.loadHTMLString(sn-p, baseURL: nil)
一切就绪。
【讨论】:
以上是关于在 UIWebView 中调整文本大小 - Swift 3的主要内容,如果未能解决你的问题,请参考以下文章
如何在 UIModalPresentationFormSheet 中调整 UIWebView 的大小?
调整 UIWebView 框架大小时如何禁用 UIWebView 调整内容大小
在 UIScrollView 内滚动时,调整大小的 UIWebView 返回到原始大小