如何在 Swift 的另一个生命周期时刻应用 scalePagesToFit?

How to apply scalePagesToFit in another lifecycle moment in Swift?

我正在制作一些基于 webView 的简单视图。我想简单地在 viewDidLoad 中调用 scalePagesToFit = true 但这不能正常工作。我想要适应的视图 - 没问题,但已经正确显示(无需调整大小)的视图已经调整大小和拉伸 - 这是我想要避免的。这就是我添加检查加载的内容是否比屏幕宽的原因。

private var needsResize: Bool = false {
        didSet {
            if self.needsResize == true {
                self.webView.scalesPageToFit = true
            } else {
                self.webView.scalesPageToFit = false
            }}}

 override func viewDidLoad() {
        super.viewDidLoad()
        webView.delegate = self
        self.webView.scrollView.maximumZoomScale = 20
        self.webView.scrollView.minimumZoomScale = 0.5

       (...)
    }

    func webViewDidFinishLoad(webView: UIWebView) {
        let scrollWidth = self.webView.scrollView.contentSize.width
        let screenSize: CGRect = UIScreen.mainScreen().bounds
        let screenWidght = screenSize.width

        if scrollWidth > screenWidght {
            self.needsResize = true
        }
    }

主要问题是这里的生命周期对我不利。我可以测量 viewWillAppear 之前和 viewDidLoad 之后的内容。 我试着把它放在 viewWillAppearviewDidAppear 中,但它似乎不起作用 - 主要是因为 scalesPagesToFit 不起作用。唯一可行的马马虎虎的解决方案是将 viewDidLoad 放入 didSet。但是你可以猜到它是如何工作的——整个视图都在闪烁并重新加载比屏幕更宽的内容。 您对我有什么想法或提示吗?

我通过移动创建新方法解决了这个问题,例如loadWebContent()。 我将所有与 webview 加载相关的内容都移到了这里,就像那样

loadWebContent(){
 self.webView.loadHTMLString(text, baseURL: NSURL(fileURLWithPath: NSBundle.mainBundle().bundlePath))
}

然后它在 viewDidLoad 中调用了一次,而不是在 didSet 中调用了第二次。并且 didSet 已被重写和简化。

  didSet {
     self.webView.scalesPageToFit = self.needsResize
     loadWebContent()
}

就这么简单!我希望这会对某人有所帮助。