解决方案
若是你完全担任苹果的这个默许功效,那就不必要去编削任何代码。
如果,你原本就比较细心,曾经配置了modalPresentationStyle的值,那你也不会有这个影响。
对于想要找回本来默认交互的同学,直接设置以下便可:
self.modalPresentationStyle = UIModalPresentationOverFullScreen;
3.1.6 UITextField 的私有属性 _placeholderLabel 被禁止访谒了
IOS 13下调用下面代码会导致闪退
[self.textField setValue:self.placeholderColor forKeyPath:@“_placeholderLabel.textColor”];
1
打印弊端信息如下:
‘Access to UITextField’s _placeholderLabel ivar is prohibited. This is an application bug’
推荐内容IMESSGAE相关
作者✈️@IMEAE推荐内容 | iMessage苹果推软件 *** 点击即可查看作者要求内容信息 |
---|---|
作者✈️@IMEAE推荐内容 | 1.家庭推内容 *** 点击即可查看作者要求内容信息 |
作者✈️@IMEAE推荐内容 | 2.相册推 *** 点击即可查看作者要求内容信息 |
作者✈️@IMEAE推荐内容 | 3.日历推 *** 点击即可查看作者要求内容信息 |
作者✈️@IMEAE推荐内容 | 4.虚拟机安装简单 *** 点击即可查看作者要求内容信息 |
作者✈️@IMEAE推荐内容 | 5.iMessage *** 点击即可查看作者要求内容信息 |
解决方案:
UITextField有个attributedPlaceholder的属性,咱们能够自定义这个富文本来到达我们需要的成果。
NSMutableAttributedString *placeholderString = [[NSMutableAttributedString alloc] initWithString:placeholder attributes:@{NSForegroundColorAttributeName : self.placeholderColor}];
_textField.attributedPlaceholder = placeholderString;
1
2
3
4
iOS 13 经由过程 KVC 法子点窜公有属性,有 Crash 风险,谨慎利用!并不是全部KVC都会Crash,要测验考试!
3.1.7 UISearchBar表示标题
SearchBar的高度只有1px
升级到iOS13,UISearchController上的SearchBar表现很是,查察后发明对应的高度只要1px,目前没找到细致致使的原因,
解决办法是: 使用KVO监听frame值变革后设置去理当显示的高度
黑线处置crash
曩昔为了处理搜索框的黑线题目会遍历后删除UISearchBarBackground,在iOS13会导致UI渲染败北crash;
解决办法是: 设置UISearchBarBackground的layer.contents为nil
TabBar红点偏移
如果以前有通过TabBar上图片位置来设置红点位置,在iOS13上会发现显示位置都在最左边去了。遍历UITabBarButton的subViews发现只有在TabBar选中状态下才华取到UITabBarSwappableImageView,
解决办法是: 修改为通过UITabBarButton的位置来设置红点的frame
3.1.8 黑暗情势 Dark Mode
Apps on iOS 13 are expected to support dark mode
Use system colors and materials
Create your own dynamic colors and images Leverage flexible infrastructure
UI 需要出一套新交互
在iOS13,为UIViewController和UIView扩展了一个新的API-overrideUserInterfaceStyle,使用方法,官方文档大略是这么说的:
通过设置overrideUserInterfaceStyle属性以使该视图及其子视图具有特定的UIUserInterfaceStyle。但如果想要获得今后的UIUserInterfaceStyle,需要改用traitCollection.userInterfaceStyle。
尽可能使用UIViewController上的overrideUserInterfaceStyle属性。仅在如下时辰使用此属性:
(1) 在单个视图或鄙视图层次布局上部分使用特定格局。
(2) 您但愿在全数UIWindow及其视图控制器和模态弹出的ViewController上使用特定款式,且不希望强逼变更全部应用程序具备样式。 (如果您切当希望整个应用程序具有某种样式,请不要使用它,而是在Info.plist中设置UIUserInterfaceStyle键。)
当设置在平常的UIView上时:
此属性仅影响此视图及其子视图的特征。
它不会影响任何视图控制器或别的视图控制器的子视图。
在UIWindow上设置时:
此属性会影响rootViewController,从而影响整个视图控制器和视图层次结构。
它还会影响该window模态进去的界面。
因此可知,overrideUserInterfaceStyle不单会影响本身,还会影响自己的子视图,换做window就会影响整个window中的所有视图及视图控制器,包括模态跳转出来的视图控制器。
而且,文档中也特别强调了,你可以设置整个应用程序只是用某种样式,具体方法可以通过代码,也可以通过info.plist设置装备摆设键User Interface Style,对应的Value为Light/Dark。
if #available(iOS 13.0, *) {
window?.overrideUserInterfaceStyle = .light;
}
1
2
3
3.1.8.1 适配暗中形式
适配Dark 模式紧张从这几个方面:
模拟器调试(simulator debug)
图片(assets)
色采(color)
状态栏(status bar)这类是间接读取当地文件 URL 的方式,而在 Debug 下我们也看到如许的读取方式:
jsCodeLocation = [NSURL URLWithString:@“http://localhost:8081/index.ios.bundle?platform=ios&dev=true”];
1
如果我们将这个 URL 换成长途服务器上的 URL,就能够动态的读取最新的 JS Bundle 了。可是实际上这种方式是不成行的,因为远程加载 JS Bundle 是需要时间的,我们总不可能让用户在那干等着吧。因而想到另外的方式,通过进入 App 之落后行检测,如果有新版本的 JS Bundle 的话,则进行新 Bundle 的下载。而这个又可以通过两种方式进行处置:
1、 直接报告用户,正在下载新的资本包,并通过 loading 界面让用户进行等待;
2、 不让用户发觉,在背面进行新版本的下载,用户下次利用 App 的时候加载新的资源包。
下面我要先容的是第二种方法。也就是通过背景更新。为了让用户每次翻开 App 能拿到以后最新的 JS Bundle,我们让其从 Document 处去读取 JS Bundle,新版本的 JS Bundle 下载后也一样存在这个目次,类似下面代码:
NSURL *jsCodeLocation;
jsCodeLocation = [self URLForCodeInDocumentsDirectory];
if (![self hasCodeInDocumentsDirectory]) {
//从 Document 上读取 JS Bundle
BOOL copyResult = [self copyBundleFileToURL:jsCodeLocation];
if (!copyResult) {
//拷贝失利,从 main Bundle 上读取
jsCodeLocation = [self URLForCodeInBundle];
}
}
RCTBridge *bridge = [self createBridgeWithBundleURL:jsCodeLocation];
rootView = [self createRootViewWithBridge:bridge];
1
2