包含HTML /属性文本的UILabel - 如何在UIScrollView

时间:2017-10-23 12:36:44

标签: swift uiscrollview uilabel ios-autolayout

我的UIScrollView只包含一个UILabel。 UILabel包含一个由HTML构成的NSAttributedString:

let str = try NSAttributedString(data: content.data(using: String.Encoding.unicode, allowLossyConversion: true)!, options: [NSDocumentTypeDocumentAttribute : NSHTMLTextDocumentType], documentAttributes: nil)

现在我想让用户缩放标签以使所有内容更大。仅使用时

func viewForZooming(in scrollView: UIScrollView) -> UIView?

一切都按预期工作,但字体变得模糊。我尝试在缩放后更改字体大小:

func scrollViewDidEndZooming(_ scrollView: UIScrollView, with view: UIView?, atScale scale: CGFloat) {
    myLabel.setFontSize(pointSize: scrollView.zoomScale)
}

功能如下:

extension UILabel {
    func setFontSize(pointSize: CGFloat) {
        let fullRange = NSRange(location: 0, length: text!.count)
        let mutableAttributeText = NSMutableAttributedString(attributedString: attributedText!)
        mutableAttributeText.enumerateAttribute(NSFontAttributeName, in: fullRange, options: NSAttributedString.EnumerationOptions.longestEffectiveRangeNotRequired) {
        (attribute: Any!, range: NSRange, stop: UnsafeMutablePointer<ObjCBool>) -> Void in
        if let attributeFont = attribute as? UIFont {
            let newPointSize = 12 * pointSize
            let scaledFont = UIFont(descriptor: attributeFont.fontDescriptor, size: newPointSize)
            mutableAttributeText.addAttribute(NSFontAttributeName, value: scaledFont, range: range)
        }
    }
    attributedText = mutableAttributeText
}

}

但是文本的位置与以前完全不同。现在,让用户放大和缩小以及文本仍然清晰的最佳方法是什么?我正在使用自动布局将标签放在UIScrollView中。

1 个答案:

答案 0 :(得分:0)

@swalkner因为你必须显示一个html,为什么不使用WKWebview而不是UIScrollView。

let htmlString = "some_html"
let webView:WKWebView = WKWebView.init(frame: frame)
webView.backgroundColor = UIColor.white
self.view.addSubview(webView)
// load html
webView.loadHTMLString(htmlString, baseURL: nil)

如果加载html需要一点时间,你可以简单地尝试预加载webview,通过创建它并在推送或呈现控制器之前加载html。