Qui*_*lor 140
错误是正确的行为,而不是Xcode 9中的错误.尽管在iOS 8中引入了WKWebView,但是-[WKWebView initWithCoder:]只有在iOS 11中修复了一个错误,它总是在运行时崩溃,从而阻止在Interface Builder中配置.
https://bugs.webkit.org/show_bug.cgi?id=137160
而不是允许开发人员在IB中构建可能在运行时被破坏的东西,这是一个构建错误.这是一个不方便的限制,因为iOS 11最近才发布,但实际上没有其他好的选择.
旧部署目标的解决方法是继续在代码中添加WKWebView,如@ fahad-ashraf在他的回答中所述:
https://developer.apple.com/documentation/webkit/wkwebview
小智 85
这似乎是Xcode 9中的一个错误,也存在于测试版中.如果要通过故事板创建WKWebView,则只会出现构建错误.如果您在相应的ViewController类文件中逐步创建WKWebView,您应该能够在iOS 11以下的iOS版本上构建.以下是Apple网站上提供的如何实现此目的的方法:
import UIKit
import WebKit
class ViewController: UIViewController, WKUIDelegate {
var webView: WKWebView!
override func loadView() {
super.loadView()
let webConfiguration = WKWebViewConfiguration()
webView = WKWebView(frame: .zero, configuration: webConfiguration)
webView.uiDelegate = self
view = webView
}
override func viewDidLoad() {
super.viewDidLoad()
let myURL = URL(string: "https://www.apple.com")
let myRequest = URLRequest(url: myURL!)
webView.load(myRequest)
}}
Run Code Online (Sandbox Code Playgroud)
然后,您应该能够像往常一样实现WKWebView功能.
资料来源:https://developer.apple.com/documentation/webkit/wkwebview
Ale*_*ano 55
如果你想要实现与其他组件的自定义UIViewController,你可以通过故事板制作一个"容器",例如webViewContainer:
import UIKit
import WebKit
class ViewController: UIViewController, WKUIDelegate {
@IBOutlet weak var webViewContainer: UIView!
var webView: WKWebView!
override func viewDidLoad() {
super.viewDidLoad()
let webConfiguration = WKWebViewConfiguration()
let customFrame = CGRect.init(origin: CGPoint.zero, size: CGSize.init(width: 0.0, height: self.webViewContainer.frame.size.height))
self.webView = WKWebView (frame: customFrame , configuration: webConfiguration)
webView.translatesAutoresizingMaskIntoConstraints = false
self.webViewContainer.addSubview(webView)
webView.topAnchor.constraint(equalTo: webViewContainer.topAnchor).isActive = true
webView.rightAnchor.constraint(equalTo: webViewContainer.rightAnchor).isActive = true
webView.leftAnchor.constraint(equalTo: webViewContainer.leftAnchor).isActive = true
webView.bottomAnchor.constraint(equalTo: webViewContainer.bottomAnchor).isActive = true
webView.heightAnchor.constraint(equalTo: webViewContainer.heightAnchor).isActive = true
webView.uiDelegate = self
let myURL = URL(string: "https://www.apple.com")
let myRequest = URLRequest(url: myURL!)
webView.load(myRequest)
}
Run Code Online (Sandbox Code Playgroud)
Kam*_*pai 36
如果您从较旧的目标移动到iOS 11.0并仍然收到此错误,请使用以下解决方案.
- 转到Storyboard(Main.storyboard),单击任何场景.
- 选择"文件检查器",这是Xcode的右侧属性窗口
- 将" Build for for "值更改为" iOS 11.0及更高版本 "
- 编译和构建
Naj*_*jam 13
我遇到了同样的问题但是如果我们以编程方式添加WKWebView就可以解决这个问题.
做任何你想在故事板中做的设计,但留出WKWebView的空间,在那个区域拖放一个视图并将其命名为webViewContainer并声明这两个属性,
@property (weak, nonatomic) IBOutlet UIView *webViewContainer;
@property(nonatomic, strong)WKWebView *webView;
Run Code Online (Sandbox Code Playgroud)现在创建并添加webView,如下所示:
-(instancetype)initWithCoder:(NSCoder *)aDecoder
{
self.webView = [self createWebView];
self = [super initWithCoder:aDecoder];
return self;
}
Run Code Online (Sandbox Code Playgroud)
createWebView函数声明为,
-(WKWebView *)createWebView
{
WKWebViewConfiguration *configuration =
[[WKWebViewConfiguration alloc] init];
return [[WKWebView alloc] initWithFrame:CGRectZero configuration:configuration];
}
Run Code Online (Sandbox Code Playgroud)现在将这个新创建的webView添加到您的containerView中,如下所示:
-(void)addWebView:(UIView *)view
{
[view addSubview:self.webView];
[self.webView setTranslatesAutoresizingMaskIntoConstraints:false];
self.webView.frame = view.frame;
}
Run Code Online (Sandbox Code Playgroud)最后,只需像这样加载您的Url,
-(void)webViewLoadUrl:(NSString *)stringUrl
{
NSURL *url = [NSURL URLWithString:stringUrl];
NSURLRequest *request = [NSURLRequest requestWithURL:url];
[self.webView loadRequest:request];
}
Run Code Online (Sandbox Code Playgroud)感谢您阅读本文.
WebKit 是在iOS 8中引入的,但它发布时出现了一个错误,导致运行时崩溃,如果您使用的是Xcode 9/10,您的项目配置支持低于iOS 11,并且如果您尝试使用界面生成器添加 WKWebView。Xcode 立即显示编译时错误。
\n\niOS 11.0之前的WKWebView(之前版本中NSCoding支持被破坏)
\n\n虽然 WKWebView 是在iOS 8中引入的,但 \xe2\x80\x93[WKWebView initWithCoder:] 中存在一个错误,仅在iOS 11中修复。
\n\n\n\n解决方案是您必须通过代码添加 WKWebView(仅当您支持 iOS 11 以下时)。这实际上听起来很奇怪。
\n\n另一个解决方案是将 Interface Builder Document Builds 选项更改为 iOS 11 及更高版本(如果您\xe2\x80\x99re 从较旧的目标迁移到 iOS 11 并且仍然遇到相同的错误)。
\n