随着iPhone 11的发布,iOS 13适配也提上了日程,接下来就开发中升级iOS13的手机可能出现的问题
Xcode: 11.0
iOS : 13.0

UIViewController 模态弹出界面

viewController.present(presentVC, animated: true, completion: nil)
在调用模态弹出视图,会发现弹出的界面没有全屏。如图

通过多次的尝试,发现在低版本里面不会发生这种情况(iOS12及以下),于是我查阅了最新的开发文档,发现了端倪,主要还是因为我们之前忽略了UIViewController里面的一个属性,即:modalPresentationStyle

 Defines the presentation style that will be used for this view controller when it is presented modally. Set this property on the view controller to be presented, not the presenter.If this property has been set to UIModalPresentationAutomatic, reading it will always return a concrete presentation style. By default UIViewController resolves UIModalPresentationAutomatic to UIModalPresentationPageSheet, but other system-provided view controllers may resolve UIModalPresentationAutomatic to other concrete presentation styles.Defaults to UIModalPresentationAutomatic on iOS starting in iOS 13.0, and UIModalPresentationFullScreen on previous versions. Defaults to UIModalPresentationFullScreen on all other platforms.public enum UIModalPresentationStyle : Int {case fullScreen@available(iOS 3.2, *)case pageSheet@available(iOS 3.2, *)case formSheet@available(iOS 3.2, *)case currentContext@available(iOS 7.0, *)case custom@available(iOS 8.0, *)case overFullScreen@available(iOS 8.0, *)case overCurrentContext@available(iOS 8.0, *)case popover@available(iOS 7.0, *)case none@available(iOS 13.0, *)case automatic
}

通过查看API 可以看到,iOS 13 新增一个:automatic类型,默认情况下就是这个所以才会弹出不是全屏的界面。如果我们想要修改为全屏的话
可以:presentVC.modalPresentationStyle = .fullScreen设置为全屏即可

KVC 限制

iOS13以后已经不能肆无忌惮的通过 KVC来修改一些没有暴露出来的属性了。

*** Terminating app due to uncaught exception 'NSGenericException', reason: 'Access to xxx's _xxx ivar is prohibited. This is an application bug'

我们常用的有

// UITextField 的 _placeholderLabellet textField = UITextField.init()textField.setValue(UIColor.red, forKey: "_placeholderLabel.textColor")/// UISearchBar 的 _searchField[searchBar valueForKey:@"_searchField"]

下面方法替换

///分别设置字体大小和颜色(富文本)
textField.attributedPlaceholder = NSAttributedString.init(string: "请输入....", attributes: [NSAttributedString.Key.foregroundColor: UIColor.red], [NSAttributedString.Key.font: UIFont.systemFont(ofSize: 15)])/// UISearchBar 用 searchField代替
bar.value(forKey: "searchField") as! UITextField

UISegmentedControl 默认样式改变


默认样式变为白底黑字,如果设置修改过颜色的话,页面需要修改

UITabbar

如果之前有通过TabBar上图片位置来设置红点位置,在iOS13上会发现显示位置都在最左边去了。遍历UITabBarButton的subViews发现只有在TabBar选中状态下才能取到UITabBarSwappableImageView,解决办法是修改为通过UITabBarButton的位置来设置红点的frame

App启动过程中,部分View可能无法实时获取到frame

// 只有等执行完 UIViewController 的 viewDidAppear 方法以后,才能获取到正确的值,在viewDidLoad等地方 frame Size 为 0,例如:UIApplication.shared.statusBarFrame

废弃UIWebView

查看API可以看到:iOS 2.0 到 iOS 11.0
在12.0就已经被废弃,部分APP使用webview时, 审核被拒

@available(iOS, introduced: 2.0, deprecated: 12.0, message: "No longer supported; please adopt WKWebView.")
open class UIWebView : UIView, NSCoding, UIScrollViewDelegate {...........................
}

CNCopyCurrentNetworkInfo

iOS13 以后只有开启了 Access WiFi Information capability,才能获取到 SSID 和 BSSID wi-fi or wlan 相关使用变更
最近收到了苹果的邮件,说获取WiFi SSID的接口CNCopyCurrentNetworkInfo 不再返回SSID的值。不仔细看还真会被吓一跳,对物联网的相关APP简直是炸弹。仔细看邮件还好说明了可以先获取用户位置权限才能返回SSID。
注意:目本身已经打开位置权限,则可以直接获取

- (NSString*) getWifiSsid {if (@available(iOS 13.0, *)) {//用户明确拒绝,可以弹窗提示用户到设置中手动打开权限if ([CLLocationManager authorizationStatus] == kCLAuthorizationStatusDenied) {NSLog(@"User has explicitly denied authorization for this application, or location services are disabled in Settings.");//使用下面接口可以打开当前应用的设置页面//[[UIApplication sharedApplication] openURL:[NSURL URLWithString:UIApplicationOpenSettingsURLString]];return nil;}CLLocationManager* cllocation = [[CLLocationManager alloc] init];if(![CLLocationManager locationServicesEnabled] || [CLLocationManager authorizationStatus] == kCLAuthorizationStatusNotDetermined){//弹框提示用户是否开启位置权限[cllocation requestWhenInUseAuthorization];usleep(50);//递归等待用户选选择return [self getWifiSsidWithCallback:callback];}}NSString *wifiName = nil;CFArrayRef wifiInterfaces = CNCopySupportedInterfaces();if (!wifiInterfaces) {return nil;}NSArray *interfaces = (__bridge NSArray *)wifiInterfaces;for (NSString *interfaceName in interfaces) {CFDictionaryRef dictRef = CNCopyCurrentNetworkInfo((__bridge CFStringRef)(interfaceName));if (dictRef) {NSDictionary *networkInfo = (__bridge NSDictionary *)dictRef;NSLog(@"network info -> %@", networkInfo);wifiName = [networkInfo objectForKey:(__bridge NSString *)kCNNetworkInfoKeySSID];CFRelease(dictRef);}}CFRelease(wifiInterfaces);return wifiName;
}

打印:如下

 network info -> {BSSID = "44:dd:fb:43:91:ff";SSID = "Asus_c039";SSIDDATA = <41737573 5f633033 39>;
}
不同意
network info -> {BSSID = "00:00:00:00:00:00";SSID = WLAN;SSIDDATA = <574c414e>;
}

SceneDelegate

有关Xcode 11 新建工程创建SceneDelegate文件,可以参考我的这篇文章:iOS 13 SceneDelegate适配

iOS 13 暗黑模式

当我们系统开启暗黑模式的时候,你会发现我们的有些界面白色界面变黑,黑色字体变白。
原因:我们没有设置背景例如UITableviewCell背景,以及采用UILabel的默认背景黑色,当切换到暗黑模式的时候就会出现上述情况。
当我们还不打算适配暗黑模式的时候,解决方式1:

  1. 手动设置各个页面背景。显然不太好,麻烦还容易遗漏
  2. 在info.plist中添加一个配置文件就好了:User Interface Style设置为Light


**注释:**关于如何优雅的适配暗黑模会在后续的博客中更新,敬请期待!
持续更新中…

iOS 13适配汇总相关推荐

  1. iOS 13适配——暗黑模式

    暗黑模式介绍 Implementing Dark Mode on iOS How To Adopt Dark Mode In Your iOS App Adopting iOS Dark Mode S ...

  2. iOS 13 适配TextField 崩溃问题

    iOS 13 之后直接通过以下方式修改Textfield的时候会出现报错信息 [_accountText setValue:Color_666666 forKeyPath:@"_placeh ...

  3. iOS 13 适配,关闭黑暗模式(夜间模式)

    关闭黑暗模式方式,在info.plist中添加  User Interface Style  Light

  4. IOS 屏幕适配(一)理论篇

    IOS 屏幕适配(一)理论篇 1. IOS 屏幕适配基本概念 1.1 IOS 设备的尺寸和分辨率 1.1.1 分辨率相关概念 1.1.2 IOS 各个设备对应的分辨率 1.2 设计和开发之间的多屏适配 ...

  5. IOS屏幕适配(四)最新系统IOS13适配

    IOS屏幕适配(四)最新系统IOS13适配 3. IOS 最新系统适配问题 3.1 IOS 13 适配 3.1.1 即将废弃的 LaunchImage 3.1.2 Sign in with Apple ...

  6. iOS 13 问题解决以及苹果登录,暗黑模式

    本文对应github地址iOS 13 问题解决以及苹果登录,如果由于github调整导致资源找不到或细节更改,请访问github 本文掘金地址 本文直接搬砖,随便看看就行 iOS 13 (Xcode1 ...

  7. iOS 13 Scene Delegate and multiple windows

    iOS 13 Scene Delegate and multiple windows iOS 13的一大改进就是支持multiple windows(多窗口)功能,虽然多窗口仅在iPadOS上获得支持 ...

  8. 适配iOS 13 tabbar 标题字体不显示以及返回变蓝色的为问题

    // 适配iOS 13 tabbar 标题字体不显示以及返回变蓝色的为问题 if (@available(iOS 13.0, *)) {//[[UITabBar appearance] setUnse ...

  9. Xcode 11 新建项目适配 iOS 13 以下设备

    前言 Xcode 11 及以后版本新建项目都会多了一对 SceneDelegate 类文件(如下图所示) 原来是 iOS 13 之后,AppDelegate 不在负责 UI 生命周期. 所有的 UI ...

最新文章

  1. NR 5G L3无线资源控制层
  2. 从零到两百台服务器的创业野蛮生长史
  3. wireshark从入门到精通(协议排错安全篇)4
  4. rpc进程Linux,linux RPC 测试(转载)
  5. KDD 2019 | 使用神经网络为A*搜索算法赋能:以个性化路径推荐为例
  6. [Windows驱动开发](二)基础知识——数据结构
  7. MySQL笔记 - 用户管理
  8. hp服务器370G5硬盘列阵,hp DL380 g5创建raid阵列安装系统准备工作
  9. python 字符串赋值操作(分别使用三 种分隔符),Python学习笔记(3)字符串,python,三...
  10. [Hands-on Lab (2) - 使用Helm部署OpenShift应用
  11. 从set中取出指定位置的元素
  12. 高并发、高性能 Web 架构
  13. 手机网站和PC网站兼容的响应式网页设计
  14. 系统分析师考试大纲2009
  15. CUDA加速——共享内存介绍及其应用
  16. 2022年十大科技应用趋势
  17. oracle中vim设置行号,vim的常用操作
  18. 百度地图清除指定覆盖物
  19. 赵小楼《天道》深度解析(74)站着对话、品性、尊严都需要代价和成本的
  20. python manager 共享数据访问_python 进程间数据共享multiProcess.Manger实现解析

热门文章

  1. java excel 数据有效性_Excel设置数据有效性实现单元格下拉菜单的3种方法
  2. iOS 自定义转场动画
  3. 两款苹果cms仿电影先生的
  4. tree | 分类回归树模型
  5. ssm+JSP计算机毕业设计英雄联盟赛事新闻管理系统qeg6l【源码、程序、数据库、部署】
  6. 9.PS-强大的画笔工具
  7. 网络号和主机号的计算
  8. 微光集市-登陆后用户对购物车的操作(版本4.0)
  9. 基于 ffmpeg + Webassembly 实现前端视频帧提取
  10. Scala-scalaMap转JSON字符串和javaMap