Xcode 9 上,在 IB 里终于可以使用 WKWebView 了,但是如果你的项目的 deploy target 设置的是 iOS 11 以下, 就会发现 iOS 11 以下不支持使用 WKWebView 的 initWithCoder 方法(IB 初始化时调用的方法)。
所以如果你的项目想要支持到 iOS 8 以上,仍然需要使用代码初始化。
注意:
- 我把 progressView 的 Style 属性在 IB 里设置成了 Bar
- 如果你不想使用 Masonry 和 RAC,可以用 VFL 和 KVO 修改相应部分的代码
- 我把 RAC 看作 OC 和 CocoaTouch 的一部分,所以直接放到了 pch 文件里
#import "GuideViewController.h"
#import <WebKit/WebKit.h>
#import <Masonry/Masonry.h>
@interface GuideViewController ()
@property (nonatomic, strong) WKWebView *webView;
@property (nonatomic, weak) IBOutlet UIProgressView *progressView;
@end
@implementation GuideViewController
- (instancetype)initWithCoder:(NSCoder *)aDecoder {
self = [super initWithCoder:aDecoder];
if (self) {
self.webView = [[WKWebView alloc] init];
}
return self;
}
- (void)viewDidLoad {
[super viewDidLoad];
// 界面布局
[self.view addSubview:self.webView];
[self.webView mas_makeConstraints:^(MASConstraintMaker *make) {
make.edges.equalTo(self.view);
}];
[self.view bringSubviewToFront:self.progressView];
// 开始监听加载进度
@weakify(self);
[RACObserve(self.webView, estimatedProgress) subscribeNext:^(NSNumber *progress) {
@strongify(self);
[self.progressView setProgress:progress.floatValue animated:YES];
if ([progress isEqual: @1]) {
dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(0.35 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{
self.progressView.progress = 0;
});
}
}];
// 发起请求
NSURL *url = [NSURL URLWithString:@"https://www.baidu.com"];
[self.webView loadRequest:[NSURLRequest requestWithURL:url]];
}
网友评论