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

时间:2016-09-07 21:18:04

标签: ios swift uiviewcontroller lifecycle

我正在基于webView制作一些简单的视图。我想简单地在scalePagesToFit = true中致电viewDidLoad,但这无效。我想要适合的观点 - 还可以,但是已经正确显示的视图(无需调整大小)已经调整大小并拉伸 - 这就是我想要避免的。这就是我加入检查加载内容是否比屏幕宽的原因。

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。但你可以猜到它是如何工作的 - 整个视图闪烁并重新加载比屏幕更宽的内容。 你对我有什么想法或提示吗?

1 个答案:

答案 0 :(得分:0)

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

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

然后它在viewDidLoad中被召唤一次,而不是didSet中的第二次。 didSet已被重写和简化。

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

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