「 iOS知识小集 」2018 · 第 38 期
原文链接
更新:前两周我们发了一条小集
《Xcode 10.1 并没有修复由于 Assets 引起的在 iOS 9 上的崩溃问题》
,根据最新消息,苹果已经在服务器端解决了这个问题,开发者通过Xcode 10.1
打的 ipa 包在上传到苹果后台,苹果在处理包的过程中会自动修复。小伙伴们已亲自验证,不会在 iOS 9 上 Crash 啦~
上周公众号发布的以下文章:
- 关于 YYAsyncLayer 可能出现的问题
- iOS 中 isEqual 和 Hash 的笔记
- RSA 原理探究
- 何为代码质量 -- 用脑子写代码
本期知识小集的主要内容包括:
- 研究 wkwebview 的子 view 和 的关系
- 如何使 UIImagePickerController 支持横屏
- 句子拆分
- Safe Area 的一些零散点
研究 WKWebview 的子 view 和 的关系
作者: 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
居多。
关注我们
欢迎关注我们的公众号:iOS-Tips,也欢迎加入我们的群组讨论问题。可以公众号留言 ios
、flutter
等关键词获取入群方式。
「 iOS知识小集 」2018 · 第 38 期相关推荐
- 「 iOS 知识小集 」2018 · 第 23 期
上周公众号发布的以下文章: 美团客户端响应式框架 EasyReact 开源 巧妙利用 KVO 实现精准的 VC 耗时检测 微信小程序适配 iPhone X 总结 Shortcuts, Siri 功能增 ...
- 「 iOS知识小集 」2018 · 第 35 期
原文链接 上周公众号发布的以下文章: Flutter中Hybrid的实现 不改代码,Link-Time Optimization提高iOS代码效率 + 汇编代码原理分析 关于 Block 的几点思考 ...
- 「 iOS 知识小集 」2018 · 第 24 期
上周公众号发布的以下文章: iOS 图形处理概论 再谈 __bridge, __bridge_transfer, __bridge_retained(内有彩蛋) Flutter 的编译模式 这些流行编 ...
- 「 iOS知识小集 」2018 · 第 29 期
原文链接 本周我们启动主题收集,如果你有想了解的 iOS 技术方面的主题,请在我们的 github https://github.com/awesome-tips/iOS-Tips/ 提 issue, ...
- 「医疗知识图谱」到「综合性医疗大脑」
本文首发于个人博客:www.bobinsun.cn 背景 最近,由于某些原因,特别关注了医疗知识图谱方面的发展&应用情况,有了些浅薄认识,故码此文,以供参考. 随着智能时代的到来,把临床数据. ...
- 一个barcode 多个 sku号_「小白知识帖」什么是亚马逊SKU?编写SKU还有这些讲究……...
初入亚马逊的小白卖家常会听大佬们提到SKU.其实理解SKU和其作用很简单,但真正需要掌握的是如何编写有效的SKU.这些小细节的内容往往可以让小白卖家成长的更快. 什么是SKU? SKU(Stock K ...
- iOS知识小集·NSNumber to NSString出错啦
起因 某一次准备把一个NSNumber显示在lable上. NSString *text = [NSString stringWithFormat:@"%@",value]; 复制 ...
- 专题解读 |「知识图谱」领域近期值得读的 6 篇顶会论文
本期内容选编自微信公众号「开放知识图谱」. CIKM 2017 ■ 论文 | Hike: A Hybrid Human-Machine Method for Entity Alignmentin La ...
- 知识小集 2018 下半年文章汇总及年终总结
又到岁末,又到了写总结,写愿景的时候.这里,我就来简单写写小集这一年的总结和下一年的展望吧. 总结 先简单列一下我们今年的产出: 公众号从 3月2号 开始,总共发了 42 期小集合集,以及 130+ ...
最新文章
- vue实战(1)——解决element-ui中upload组件使用多个时无法绑定对应的元素
- 网页计算器源php代码,计算器网页版源代码
- Spring-学习笔记02【程序间耦合】
- 八皇后非递归算法c语言,要求;编写实现八皇后问题的递归解法或非递归解法,对于任意给定的一? 爱问知识人...
- CF788E:New task
- 小波变换原理_基于电压行波原理故障测距的相关问题
- Java-虚拟机-执行引擎/解释器/编译
- VMware Cloud Director 被曝严重漏洞,可导致黑客接管企业服务器
- python怎么读取csv文件-python如何读取csv数据
- 媒体查询Media Query
- 【愚公系列】2022年10月 微信小程序-电商项目-收货地址功能实现
- fiddler界面详解(转自:子信风蓝蓝)
- GitHub上发现个菜谱仓库,来看看程序员都吃啥?
- 神经网络各种评判指标
- ad16 怎么设置单独元件间距_AD软件中怎么添加不同元素之间的间距规则?
- ESP32快速实现3.2英寸TFT LCD中jpeg图像(ILI9341)
- (五)学习笔记:软件管理rpm、dnf软件仓库搭建与管理
- 问题 D: 零起点学算法89——程序设计竞赛
- PHP7底层设计与源码剖析PDF,【PHP7底层设计与源码分析】部分勘误
- K8s 之 ReadinessProbe(就绪探针)使用的迷惑
热门文章
- 在Ubuntu中安装MySQL (转载)
- 如何提高VS2010的性能,VS2010不再…
- c++ primer 函数传值1
- VC++工程配置的大体流程 看图说话
- webpack的简介---webpack工作笔记001
- 微服务升级_SpringCloud Alibaba工作笔记0011---Gateway常用的predicate
- STM32工作笔记0051---NVIC中断优先级管理
- SpringCloud工作笔记076--- CheckStyle插件提高java代码质量
- C#.NET学习笔记7--11---算术运算符,变量赋值,变量的交换,布尔表达式1,布尔表达式2
- 办公常用---破解在PDF中无法复制的功能