原文连接html
更新:前两周咱们发了一条小集
《Xcode 10.1 并无修复因为 Assets 引发的在 iOS 9 上的崩溃问题》
,根据最新消息,苹果已经在服务器端解决了这个问题,开发者经过Xcode 10.1
打的 ipa 包在上传到苹果后台,苹果在处理包的过程当中会自动修复。小伙伴们已亲自验证,不会在 iOS 9 上 Crash 啦~ios
上周公众号发布的如下文章:git
本期知识小集的主要内容包括:github
做者: hite和落雁web
这个问题来自需求:当 webview
下拉 bounce
的时候,在漏出的部分显示自定义的 view。相似在微信打开一个公众号后显示的“此页面由 **** 提供”
,这样的交互。正则表达式
中间通过若干测试,实现此功能有三个关键点;objective-c
webview.scrollView.backgroundColor = [UIColor clearColor];
目的为了下拉整个页面时,可以漏出咱们自定义 view。(这里须要指出的是,下拉页面出现 bounce
效果时,漏出的 是 wkscrollview
;为何这样,我猜想是由于 Safari 渲染的时候,bounce 效果是出在 wkscrollview
上,可参看这个测试页面,请在 Safari 里打开)WKWebview
和 WKScrollView
之间(猜想,webview.scrollView
是 WKScrollView
的代理对象,而 WKScrollView
是 的代理元素,是否真的这样须要看看源码)。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 的颜色,是否生效看不一样的状况;安全
#ffffff
白色时,不论何时去设置 body 颜色都不会覆盖 webview.scrollView.backgroundColor
的颜色。webview.scrollView.backgroundColor
经过对照 HTML 的 DOM 层级和 WKWebview 的层级,服务器
有如下发现;微信
WKScrollView
,因此设置 body 颜色会设置到 WKScrollView
的背景色。WKContentView
嵌套。当整个页面是长页面须要分页时,会分多个 WKCompositingView
逐个显示;使用上述方案实现下拉时显示自定义元素有个问题;
scrollView
时候,设置 webview.scrollView.backgroundColor
的颜色,会将 h5 本身设置的背景色覆盖,因此 h5 要尽可能不要依赖 body 的背景色作滑动背景;fixed
元素,下拉时也会漏出 bounce 背景色。此时若是背景色设置透明后出现一个很奇怪的 漏出,这时候不该该漏出。若是解决这个问题呢,若是真的要解决这个问题,可能须要去读 html 的样式,这样就比较麻烦了。fixed
元素的后面,如微信那样。具体样式能够将 测试页面2 放到微信里看效果。若是真正要解决问题 2 ,目前还须要再找找方案,但愿看到 webkit2 的源码后能有方案。
做者: 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}
复制代码
做者: 这个汤圆没有馅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
居多。欢迎关注咱们的公众号:iOS-Tips,也欢迎加入咱们的群组讨论问题。能够公众号留言 ios
、flutter
等关键词获取入群方式。