SafariServices框架
相信大家在日常开发中,都离不开web吧,部分页面还是得用网页进行展示。在iOS7和之前我们可以用UIWebView来加载网页,在iOS8 Apple为我们带来了WKWebView(WebKit框架),而在iOS9 Apple为我们提供了进一步的封装库SafariServices。
SafariServices的可定制性很差,可以说毫无定制性可言,我们只能控制一下导航栏和底部工具栏的颜色,以及通过SFSafariViewControllerDelegate可以添加自定的分享功能(UIActivity)。
SFSafariViewController
一个特殊的UIViewController,为我们使用Safari的UI框架加载网页内容,同时还能享受到Safari的一些便利性:
- 高度一致的用户体验性
- 和Safari共享Cookie
- 密码、证书自动填充
- Safari阅读器(可选是否默认进入阅读器模式)
NSURL *url = [NSURL URLWithString:@"http://www.0daybug.com"];
SFSafariViewController *safariVC;
if (@available(iOS 11.0, *)) {
SFSafariViewControllerConfiguration *configuration = [[SFSafariViewControllerConfiguration alloc] init];
configuration.entersReaderIfAvailable = NO;
configuration.barCollapsingEnabled = YES;
safariVC = [[SFSafariViewController alloc] initWithURL:url configuration:configuration];
} else {
safariVC = [[SFSafariViewController alloc] initWithURL:url];
}
if (@available(iOS 11.0, *)) {
safariVC.dismissButtonStyle = SFSafariViewControllerDismissButtonStyleClose;
}
if (@available(iOS 10.0, *)) {
safariVC.preferredBarTintColor = [UIColor orangeColor];
safariVC.preferredControlTintColor = [UIColor redColor];
}
// [self.navigationController pushViewController:safariVC animated:true];
[self presentViewController:safariVC animated:true completion:nil];
SFSafariViewController在push和present上有些许区别。
- push方式
- 点击左上角的按钮并不会关闭网页,需要自行处理
- 不支持屏幕左侧滑动返回上一页的手势
- present方式
- 点击左上角按钮会关闭网页返回上一个页面
- 支持屏幕左侧滑动返回上一页的手势
SFSafariViewControllerConfiguration
iOS11新增的配置类,目前的可配置选项仅有两个:
- entersReaderIfAvailable
- 在当前网页支持阅读器时是否自动进入阅读器模式浏览网页
- 默认NO
- barCollapsingEnabled
- 当拖动网页进行滚动时,是否折叠导航栏和隐藏底部工具栏
- 默认YES
SSReadingList
添加URL链接到Safari浏览器的阅读列表。需要注意一点的是相同的URL可以添加多次,系统并不会过滤相同的URL。
NSURL *url = [NSURL URLWithString:@"http://www.0daybug.com"];
SSReadingList *readingList = [SSReadingList defaultReadingList];
[readingList addReadingListItemWithURL:url title:@"我的博客" previewText:@"记录日常开发生涯中的点滴" error:nil];
SFContentBlockerManager
Content Blocker,据说是一个Browser Extension之类的玩意,和广告过滤的作用类似,目前功能不明,更多信息可以看这里。