如何在 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
之后的内容。
我试着把它放在 viewWillAppear
或 viewDidAppear
中,但它似乎不起作用 - 主要是因为 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()
}
就这么简单!我希望这会对某人有所帮助。
我正在制作一些基于 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
之后的内容。
我试着把它放在 viewWillAppear
或 viewDidAppear
中,但它似乎不起作用 - 主要是因为 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()
}
就这么简单!我希望这会对某人有所帮助。