iOS13新特性

Dark Mode 暗黑模式 \color{red}{}

  • Dark Mode样式
    image.png
  • UIColor拥有了动态属性
  1. iOS13之前只能表示一种颜色
    image.png
  2. iOS13以后能表示两种模式下不同颜色
    image.png
  3. 初始化动态UIColor方法
    \color{blue}{iOS13 UIColor增加了两个初始化方法,使用以下方法可以创建动态UIColor(一个是类方法,一个是实例方法)}

    image.png

    • 这两个方法要求传一个block进去

    • 当系统在\color{red}{LightMode}\color{red}{DarkMode}之间相互切换时就会触发此回调

    • 这个block会返回一个\color{red}{UITraitCollection}

    • 我们需要使用其属性\color{red}{userInterfaceStyle},它是一个枚举类型,会告诉我们当前是\color{red}{LightMode}还是\color{red}{DarkMode}

      image.png

    • 颜色适配 示例:
      image.png
  • 图片也能在两种模式下自由切换
    \color{red}{Assets.xcassets}里新建\color{red}{Image set} 右侧栏的\color{red}{Appearances},选择\color{red}{Any,Dark}

    image.png

  • 图片适配 示例:
    image.png
  • 获取当前模式(Light or Dark)
    image.png
  • 设置App依旧保持原来样式 可通过设置plist完成


    image.png
  • 强行设置App模式
    \color{green}{当系统设置为Light Mode 时,App某些VC或view需要一直显示Dark Mode样式时,可以强行设置当前的VC为指定模式通过以下方式}

    image.png

    示例:
    image.png

    ⚠️\color{red}{注意! ! !}

    • 当强行设置当前VC为Dark Mode后,这个VC下的子视图都是Dark Mode模式
    • 由这个VC Present/Push出的VC不会受到影响,依然跟随系统模式
    • 要想一键设置App下所有的VC都是Dark Mode,可以直接设置window的UIUserInterfaceStyle(不推荐 推荐plist设置)
    • 对window.rootViewController强行设置Dark Mode 也不会影响后续present除的VC的模式
    • 根VC设置某个模式,继承的VC也会收到影响
    • 要是先不适配暗黑模式的话,要么低版本Xcode出包,要么Xcode11里的plist设置Light模式
  • 模拟器动态修改模式需要通过Xcode设置且debug状态才生效
    image.png
  • 监听模式切换

    有时需要监听系统模式变化作出响应,通过以下方法
    image.png

    示例:
    image.png
  • CGColor适配
    \color{green}{iOS13 UIColor能表示动态颜色,但CGColor依然只能表示一种颜色,因此对于CALayer等对象需要利用上述监听模式切换方法}
    1.方式一:resolvedColor

    image.png

    示例:
    image.png

    2.方式二:performAsCurrent
    image.png

    示例:
    image.png

    3.方式三:最简单的方式
    直接设置为一个动态UIColor的CGColor即可
    image.png

    ⚠️! ! ! 设置layer颜色都是在traitCollectionDidChange中,意味着如果没有发生模式切换,layer将会没有颜色,需要设置一个基本颜色

  • 模式切换时打印log设置
    1.在Xcode菜单栏\color{red}{Product}->\color{red}{Scheme}->\color{red}{Edit Scheme}
    2.选择\color{red}{Run}->\color{red}{Arguments}->\color{red}{Arguments Passed On Launch}
    3.添加以下命令

    image.png

  • NSAttributedString优化
    \color{green}{对于UILabel、UITextField、UITextView,在设置NSAttributedString时也要考虑适配Dark Mode,否则在切换模式时会与背景色融合}

  1. 不推荐做法
    image.png

    2.推荐做法
    image.png
  • Status Bar设置
    \color{red}{iOS13对Status BarAPI做了修改,之前Status Bar有两种状态}
    1.UIStatusBarStyleDefault 文字黑色
    2.UIStatusBarStyleLightContent 文字白色

    image.png

    \color{red}{iOS13以后有三种状态}
    1.UIStatusBarStyleDefault 自动选择黑色或白色
    2.UIStatusBarStyleDarkContent 文字黑色
    3.UIStatusBarStyleLightContent 文字白色
    image.png

  • UIActivityIndicatorView加载视图
    \color{red}{之前有三种样式:}
    1.UIActivityIndicatorViewStyleGray 灰色
    2.UIActivityIndicatorViewStyleWhite 白色
    3.UIActivityIndicatorViewStyleWhiteLarge 白色(大型)
    \color{red}{iOS13废弃了以上三种样式,而用以下两种样式代替:}
    1.UIActivityIndicatorViewStyleLarge (大型)
    2.UIActivityIndicatorViewStyleMedium(中型)
    3.可通过color属性设置其颜色
    示例:

    image.png

    效果:
    iOS13之前三种样式
    image.png

    iOS13以后的两种样式
    image.png

  • 模态弹出presentViewController
    1.在iOS13中\color{red}{presentVC}样式发生了变化,\color{red}{UIModalPresentionStyle}增加了一个\color{red}{UIModalPresentationAutomatic},并且在iOS13中默认是这个值,而之前默认的是\color{red}{UIModalPresentationFullScreen}\color{red}{UIModalPresentationAutomatic}自带手势下拉dismiss,弹出的vc适配可以在公共父类的init中设置\color{red}{modalPresentationStyle}\color{red}{UIModalPresentationFullScreen}。⚠️!!! VC的高度也发生了变化,在viewdidload中和实际的高度是不一样的。

    image.png
    image.png

    2.生命周期也有所不同
    \color{red}{UIModalPresentationAutomatic}\color{red}{UIModalPresentationFullScreen}不同,当A弹出B时,如果是\color{red}{UIModalPresentationFullScreen},A是会调用disappear相关生命周期方法的,B dismiss时,A也会调用appear相关方法,而\color{red}{UIModalPresentationAutomatic}不会调用,所以想在A的这四个方法做事情的同学需要另辟蹊径了。
    image.png

  • KVC不允许使用私有方法

    比如UITextField设置placeholder
    image.png

    会直接crash

    可以替换成
    image.png

    只需要使用空格占位,之后设置textF.placeholder就行
  • Xcode11新建工程的变化
    iOS13工程结构发生了变化,有两个代理

  1. AppDelegate
  2. SceneDelegate
    \color{red}{iOS13之前的生命周期}
    image.png

    对应到方法就是一些Appdelegate里的方法以及一些可以注册监听的通知。
    \color{red}{iOS13以后的改动}
    image.png
    原本AppDelegate(UIApplicationDelegate)控制生命周期的行为移交给了SceneDelegate(UIWindowSceneDelegate)

window放到\color{red}{SceneDelegate}里管理了,这是为ipad os做准备
如果想使用以前的场景,需要删除\color{red}{UIApplicationSceneManifest(Application Scene Manifest)}并且删除info.plist中Manifest,这样就走之前AppDelegate的那些方法了,并且别忘了在AppDelegate.h中添加\color{red}{window}属性

  • 新增Menus控件
    Menus可以嵌套UIAction 也可以嵌套UIMenu 如图
    image.png

    UIMenu对象:
    image.png

    其对应的有一个options参数,声明如下:
    image.png

    这个参数是用于第二层menu的,其对应\color{red}{destructive}\color{red}{displayInline}两个效果
    效果如下
    image.png

    UIAction对象:
    image.png

    前三个参数就不说了,第四个参数 \color{red}{discoverabilityTitle} 这个参数我目前没有研究出来是干嘛用的,如果有知道的小伙伴欢迎在评论区留言。
    第五个参数 \color{red}{attributes},我们先来看下声明和效果图
    image.png
    image.png

    \color{red}{attributes} 也是 \color{red}{OptionSet} 可以多个一起用,但是这几个组合都没用

第六个参数 \color{red}{state} ,一样先看声明和效果图。

image.png
image.png

可以和 搭配使用,如果 UIAction 设置了图片同时设置了 state = .on 则会把图片覆盖掉,只留下一个勾。
第七个参数是个闭包,当用户点击后会进入回调,处理相应的逻辑即可。
最后我们把 UIAction 和 editMenu 一起放到一个新的 UIMenu 中就可以达到动图中的效果了

  • Gestures 新特性

    iOS13中 tableview和collectionview都增加了双指滑动编辑的功能
    cellLinkage.gif

首先设置\color{red}{tableview.allowsMultipleSelectionDuringEditing = ture}允许多选,再实现两个代理

image.png

当用户选择完,需要做某些操作时,我们可用 获取用户选择的。

  • 编辑手势
    1.复制:三指捏合
    2.剪切:两次三指捏合
    3.粘贴:三指松开
    4.撤销:三指向左滑动(或三指双击)
    5.重做:三指向右滑动
    6.快捷菜单:三指单击
    iOS13增加了一些文本编辑的手势,这些手势系统默认会提供,如果想禁用这些手势,需要重写\color{red}{editingInteractionConfiguration}属性,代码如下:

    image.png

  • search新特性

    iOS13下 UISearchViewController 结构如下:
    image.png

\color{red}{UISearchBar}中可以获取到\color{red}{UISearchTextField}了,可以修改field的颜色、字体等。

image.png

而且增加了Token功能,Token可以被复制、粘贴和拖拽,Token还有以下特点:
1.始终在普通文本面前
2.可以被选中和删除

3.可以和普通文本一起被选中
image.png

Token创建的方式:
image.png
image.png

另外系统还提供 \color{red}{textualRange }属性,来获取普通文本的长度。

image.png

还有 属性,该属性可以控制是否展示搜索结果控制器

-PDF(长图)
iOS13中可以把 scrollview 转成 image 再把 image 转成 PDF (类似Safari截图后 把整页HTML转成PDF存储)
实现:
在控制器中实现UIScreenshotServiceDelegate代理


image.png

⚠️! ! ! 如果是无限列表,不要使用此功能。

  • textView 光标移动交互变化
    iOS13 输入框光标移动不再是摁住出现气泡移动 而是可以变成直接拖动光标的操作

  • navigationBar的frame变化
    纵坐标变成了0 所以需要处理一下
    self.navigationController.navigationBar.hidden = YES;隐藏后 低版本纵坐标为电池条高度


    image.png
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 194,390评论 5 459
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 81,821评论 2 371
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 141,632评论 0 319
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 52,170评论 1 263
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 61,033评论 4 355
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 46,098评论 1 272
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 36,511评论 3 381
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 35,204评论 0 253
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 39,479评论 1 290
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 34,572评论 2 309
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 36,341评论 1 326
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 32,213评论 3 312
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 37,576评论 3 298
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 28,893评论 0 17
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,171评论 1 250
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 41,486评论 2 341
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 40,676评论 2 335

推荐阅读更多精彩内容