2017-10-23 12 views
0

UIScrollViewにはUILabelのみが含まれています。 UILabelはNSAttributedStringが含まれているHTMLで作られた:HTML /属性付きテキストを含むUILabel - UIScrollView内での拡大/縮小方法

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

@ swalkner htmlを表示する必要があるので、UIScrollViewの代わりにWKWebviewを使用してみましょう。

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を読み込むか、コントローラを提示しようとすることができます。

+0

1)読み込みに時間がかかる、2)スクロールが灰色の背景でうまくいかない、3)ズーミングにどのように役立ちますか? – swalkner

+0

1)totaly trueですが、webviewをプリロードできます。 2)あなたはwebview(webView.backgroundColor)上の任意の種類の背景を設定できます。 3)デフォルトのWebViewではズームが可能です。 – Iosif

+0

しかし、3)私がズームインしてかなり遠くまでズームアウトすると、テキストがクリップされ、ピンチジェスチャーにした後に再びロードされます。 – swalkner

関連する問題