我的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中。
答案 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。