内容简介:作者:hite和落雁这个问题来自需求:当中间经过若干测试,实现此功能有三个关键点;
作者:hite和落雁
这个问题来自需求:当 webview 下拉 bounce 的时候,在漏出的部分显示自定义的 view。类似在微信打开一个公众号后显示的 “此页面由 **** 提供” ,这样的交互。
中间经过若干测试,实现此功能有三个关键点;
- 设置
webview.scrollView.backgroundColor = [UIColor clearColor];目的为了下拉整个页面时,能够漏出我们自定义 view。(这里需要指出的是,下拉页面出现bounce效果时,漏出的 是wkscrollview;为什么这样,我猜测是因为 Safari 渲染的时候,bounce 效果是出在wkscrollview上,可参看这个测试页面,请在 Safari 里打开) - 结合 1,将这个自定义 view,放在
WKWebview和WKScrollView之间(猜测,webview.scrollView是WKScrollView的代理对象,而WKScrollView是 的代理元素,是否真的这样需要看看源码)。 - 添加自定义 view 到
WKScrollView里的时机是- (void)scrollViewWillBeginDragging:(UIScrollView *)scrollView, 而不是- (void)webView:(WKWebView *)webView didFinishNavigation:(WKNavigation *)navigation因为不同页面书写方式,导致有些样式会生效时机不同,页面加载完毕并不是个很好的时机。
在生成 webview 的时候,设置 webview.scrollView.backgroundColor = [UIColor clearColor]; 。 特别的需要说明下 ,当 h5 在 body 上写内联样式 <body style="background-color:red">; 或者写 style 样式;或者外联 <link rel="stylesheet" href> 三种写法,去设置 body 的颜色,是否生效看不同的情况;
- 当设置的 body 颜色是
#ffffff白色时,不论什么时候去设置 body 颜色都不会覆盖webview.scrollView.backgroundColor的颜色。 - 当设置的颜色是 非白色 时,会覆盖
webview.scrollView.backgroundColor
通过对照 HTML 的 DOM 层级和 WKWebview 的层级,
有以下发现;
- html 里下拉时, bounce 效果后面的背景元素是
WKScrollView,所以设置 body 颜色会设置到WKScrollView的背景色。 - html 里其他元素全部由
WKContentView嵌套。当整个页面是长页面需要分页时,会分多个WKCompositingView逐个显示;
使用上述方案实现下拉时显示自定义元素有个问题;
- 在开始滑动
scrollView时候,设置webview.scrollView.backgroundColor的颜色,会将 h5 自己设置的背景色覆盖,所以 h5 要尽量不要依赖 body 的背景色做滑动背景; - 某些页面,如测试页面2, 头部有个
fixed元素,下拉时也会漏出 bounce 背景色。此时如果背景色设置透明后出现一个很奇怪的 漏出,这时候不应该漏出。如果解决这个问题呢,如果真的要解决这个问题,可能需要去读 html 的样式,这样就比较麻烦了。 - 对问题 2 ,有个讨巧的方案就是将漏出的自定义元素放在
fixed元素的后面,如微信那样。具体样式可以将测试页面2 放到微信里看效果。
如果真正要解决问题 2 ,目前还需要再找找方案,希望看到 webkit2 的源码后能有方案。
如何使 UIImagePickerController 支持横屏
作者:halohily
很多同学在开发横屏应用时,使用系统的 UIImagePickerController 会发现它默认只支持竖屏。笔者也遇到了这个问题,经过一番探究,如下的方式效果是最佳的:
首先,在 present 这里的 UIImagePickerController 对象 picker 之前,设置 picker 的 modalPresentationStyle 为 UIModalPresentationOverCurrentContext ,这时运行会发现横屏时它也可以正常弹出了,只是旋转设备时它不能跟随设备方向正常转动。
接下来,为 UIImagePickerController 添加一个 category,重写 shouldAutorotate 方法返回 true,重写 supportedInterfaceOrientations 方法返回 UIInterfaceOrientationMaskAll 。这时再运行会发现不仅可以横屏弹出,也可以正常旋转了。
句子拆分
作者:Lefe_x
把下面这段话拆分成句子,你会用什么方案呢?
知识小集是由几位志同道合的伙伴组成。你了解这个团队吗?我们在一起相处了 1 年多的时光!我想说:“我们是最棒的!” 复制代码
我想到的方案有:正则表达式;使用 NSScanner ;使用 componentsSeparatedByCharactersInSet : ;但这几种方案都比较麻烦,后来不经意间发现了下面这个方法。
代码如下:
NSString *text = @"知识小集是由几位志同道合的伙伴组成。你了解这个团队吗?我们在一起相处了 1 年多的时光!我想说:“我们是最棒的!”";
[text enumerateSubstringsInRange:NSMakeRange(0, [text length]) options:NSStringEnumerationBySentences usingBlock:^(NSString * _Nullable substring, NSRange substringRange, NSRange enclosingRange, BOOL * _Nonnull stop) {
NSLog(@"sentence: %@ range: %@", substring, NSStringFromRange(substringRange));
}];
复制代码
运行结果如下:
sentence: 知识小集是由几位志同道合的伙伴组成。 range: {0, 18}
sentence: 你了解这个团队吗? range: {18, 9}
sentence: 我们在一起相处了 1 年多的时光! range: {27, 17}
sentence: 我想说:“我们是最棒的!” range: {44, 13}
复制代码
Safe Area 的一些零散点
作者: 这个汤圆没有馅 weibo.com/u/660346950…
先看图一尺寸图。
我们都知道, iOS 11 引入了 Safe Area 这个概念。在 xib 或者 storyboard 上添加 subview ,都是会添加在 Safe Area 上的。例如:在 vc 上添加一个 view,上下左右约束分别为 0 ,在 iPhone X 和 iPhone 6 上展示不一样,如下图。纯代码创建的时候不会出现这个问题,因为 subview 是直接添加在 self.view 上面。
很明显,在 iPhone X 上底下会有一个 34pt 高度的留白区。分别打印一下两个机型的 self.view.safeAreaInsets ,如下图。
那么假使现在,我希望在 iPhone X 机型上,底下不要留白。页面展示效果跟 iPhone 6 一样。然而 safeAreaInsets 是只读属性,无法通过修改值达到目的。
第一种方法, Align Bottom to :Safe Area 的值改为-34。但是如果后期出了新的机型,那么这个值就不再适配,因为不推荐。
第二种方法,在 bottom 的约束上,直接以superView为参照,如下图。
另外补充几点:
-
- additionalSafeAreaInsets:controller可以扩展安全区域,如果我们设置self.additionalSafeAreaInsets = UIEdgeInsetsMake(20, 0, 0, 20);意思就是在原有的 safeAreaInsets 值中增加对应的边距值。如果原来的是 {10, 0, 0, 10} , 则最后得出的边距是 {30, 0, 0, 30}。 -
- (void)viewSafeAreaInsetsDidChange:当视图的安全区域发生变更时会触发该方法,可以通过该方法来处理安全区域变更时的UI布局。 -
- insetsLayoutMarginsFromSafeArea:默认值是YES,如果设置为 NO,所有的视图布局将会忽略safeAreaInsets这个属性了。这个只对纯代码布局视图有效,如果是xib或者storyboard布局的话不起作用。一般用于tableView居多。
以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,也希望大家多多支持 码农网
猜你喜欢:- 肖仰华谈知识图谱:知识将比数据更重要,得知识者得天下
- 基础知识:css3核心知识整理
- 从知识工程到知识图谱全面回顾 | AI&Society
- 知识图谱发展的难点&构建行业知识图谱的重要性
- 《面试知识,工作可待:集合篇》:Java 集合面试知识大全
- 第四期知识与认知图谱:神经机器翻译也应该嵌入「知识」
本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。
Realm of Racket
Matthias Felleisen、Conrad Barski M.D.、David Van Horn、Eight Students Northeastern University of / No Starch Press / 2013-6-25 / USD 39.95
Racket is the noble descendant of Lisp, a programming language renowned for its elegance and power. But while Racket retains the functional goodness of Lisp that makes programming purists drool, it wa......一起来看看 《Realm of Racket》 这本书的介绍吧!