我正在基于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
之后测量内容。
我尝试将其放入viewWillAppear
或viewDidAppear
,但似乎没有效果 - 主要是因为scalesPagesToFit
不起作用。唯一可行的解决方案是将viewDidLoad
放入didSet
。但你可以猜到它是如何工作的 - 整个视图闪烁并重新加载比屏幕更宽的内容。
你对我有什么想法或提示吗?
答案 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()
}
简单就是这样!我希望这会对某人有所帮助。