关于SceneDelegate的介绍网上已经有很多了,这里做个笔记来记录一下。
不使用SceneDelegate
- 删除掉info.plist中
Application Scene Manifest
选项,同时,文件SceneDelegate可删除可不删 - 注释或删除
UISceneSession lifecycle
的两个方法 - 在AppDelegate.h中添加一个window属性
@property (strong, nonatomic) UIWindow * window;
使用SceneDelegate
- 在AppDelegate和SceneDelegate中使用
@available(iOS 13, *)
- 在AppDelegate.h中添加一个window属性
@property (strong, nonatomic) UIWindow * window;
然后写两套同样的逻辑,iOS13以下的走AppDelegate,iOS13以上的走SceneDelegate.
写代码的时候在模拟器上显示正常,到我真机上就出了问题,发现是app跟随系统深色主题,view,label等控件都变成了深色系
全局禁用深色模式(暗黑模式)
在Info.plist
中增加Appearance
,值为Light
修改textfield的时候报错'Access to UITextField's _placeholderLabel ivar is prohibited. This is an application bug
以前的写法
[_nameTF setValue:[UIColor lightGrayColor] forKeyPath:@"_placeholderLabel.textColor"];
现在改成
#import <objc/message.h>
if (@available(iOS 13,*)){
Ivar ivar = class_getInstanceVariable([UITextField class], "_placeholderLabel");
UILabel *placeholderLabel = object_getIvar(self.nameTF, ivar);
placeholderLabel.textColor = [UIColor lightGrayColor];
}else {
[_nameTF setValue:[UIColor lightGrayColor] forKeyPath:@"_placeholderLabel.textColor"];
}
M1芯片的电脑,若Xcode使用Rosetta
打开,创建View
xib文件可能会报错An internal error occured. Editing functionality may be limited
解决办法就是去掉Rosetta
清除模拟器缓存
- 退出模拟器
- 终端执行
xcrun simctl erase all
后台返回数据<object returned empty description>
解决方法:
用string来接收,判断[string length] > 0
即可
<NSLayoutConstraint:0x6000034b7980 UIView:0x7ff21de0ce00.width == - 16 (active)>
这个错误约束是用系统的UIAlertController
出现的,从iOS12.1开始,到iOS14.4还没修复。。。无解
网友评论