美文网首页
使用 IB 结合代码兼容 iOS 8 以上 设置 WKWebVi

使用 IB 结合代码兼容 iOS 8 以上 设置 WKWebVi

作者: 栎千 | 来源:发表于2018-01-28 14:19 被阅读6次

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]];
}

相关文章

网友评论

      本文标题:使用 IB 结合代码兼容 iOS 8 以上 设置 WKWebVi

      本文链接:https://www.haomeiwen.com/subject/rraaaxtx.html