我已经尝试重写“现在(_ vIEwControllertopresent:UIVIEwController,动画标志:Bool,完成:(() – > VoID)?= nil)”和“dismiss(动画标志:Bool,完成:(() – > VoID)?)“试图理解发生了什么,但后来意识到动作表没有呈现,既没有被其父视图控制器(WKWebVIEwController)解雇,事实上我在根视图控制器上做了同样的事情并且发现它既没有出现在它上面.
我已经做了很多搜索,试图了解是什么导致了这种行为,我甚至用一个简单的WKWebVIEw构建了一个新项目,并且总是遇到同样的问题.
这是代码:
import UIKit; import WebKitclass WKWebVIEwController: UIVIEwController,WKUIDelegate,WKNavigationDelegate {var destinationUrlString: String?var myWebVIEw: WKWebVIEw!overrIDe func vIEwDIDLoad() { super.vIEwDIDLoad() let webConfiguration = WKWebVIEwConfiguration() webConfiguration.dataDetectorTypes = [] let origin = CGPoint(x: 0,y: 0) let size = CGSize(wIDth: vIEw.frame.size.wIDth,height: vIEw.frame.size.height) myWebVIEw = WKWebVIEw(frame: .init(origin: origin,size: size),configuration: webConfiguration) myWebVIEw.uIDelegate = self myWebVIEw.navigationDelegate = self myWebVIEw.allowslinkPrevIEw = false vIEw = myWebVIEw destinationUrlString = "https://www.stackoverflow.com" guard let url = URL(string: destinationUrlString!) else {return} print(url) let request = URLRequest(url: url) myWebVIEw.load(request)}func webVIEw(_ webVIEw: WKWebVIEw,dIDStartProvisionalNavigation navigation: WKNavigation!) { //show progress indicator}func webVIEw(_ webVIEw: WKWebVIEw,dIDFinish navigation: WKNavigation!) { //dismiss progress indicator}func webVIEw(_ webVIEw: WKWebVIEw,dIDFail navigation: WKNavigation!,withError error: Error) { //show error}func webVIEw(_ webVIEw: WKWebVIEw,dIDFailProvisionalNavigation navigation: WKNavigation!,withError error: Error) { //show error}}
我还附上了一个显示问题的GIF:
我正在使用Xcode 9.3(9E145)和Swift 4.1.
我错过了什么吗?怎么解决这个问题?
任何帮助将非常感激.
为了处理这种情况,在UIVIEwController层次结构的根视图控制器中(在你的情况下,这将是“根视图控制器” – 注意,在许多情况下,它可能是你必须子类的UINavgiationController)覆盖dismissVIEwControllerAnimated :完成:多次处理WKWebVIEw调用dismiss.
Objective-C的
@property (weak) UIVIEwController *lastPresentedController;- (voID)dismissVIEwControllerAnimated:(BOol)flag completion:(voID (^)(voID))completion{ // WKWebVIEw actions sheets workaround if (self.presentedVIEwController && self.lastPresentedController != self.presentedVIEwController ) { self.lastPresentedController = self.presentedVIEwController; [self.presentedVIEwController dismissVIEwControllerAnimated:YES completion:^{ if( completion ) { completion(); } self.lastPresentedController = nil; }]; } else if( !self.lastPresentedController) { [super dismissVIEwControllerAnimated:flag completion:completion]; }}
迅速
private weak var lastPresentedController : UIVIEwController?overrIDe func dismiss(animated flag: Bool,completion: (() -> VoID)? = nil) { // WKWebVIEw actions sheets workaround if presentedVIEwController != nil && lastPresentedController != presentedVIEwController { lastPresentedController = presentedVIEwController; presentedVIEwController?.dismiss(animated: flag,completion: { completion?(); self.lastPresentedController = nil; }); } else if lastPresentedController == nil { super.dismiss(animated: flag,completion: completion); }}总结
以上是内存溢出为你收集整理的ios – WKWebView *** 作表在被解雇后解除显示视图控制器全部内容,希望文章能够帮你解决ios – WKWebView *** 作表在被解雇后解除显示视图控制器所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)