适配ios13深色(夜间)和浅色模式及present卡片弹出类型

参见:https://www.jianshu.com/p/24bbeac0dfec
https://www.jianshu.com/p/b73044d42e59

ios13新增的夜间模式/深色模式和浅色模式可以在【设置】-【显示与亮度】-【外观区域】中选择。
关于开发中的常见问题,做如下说明:(不足之处,欢迎指正)

【1】-在工程.plist文件里的一级结构里添加如下属性,该设置为全局设置,基本不会影响APP;参考枚举 UIUserInterfaceStyle ;

UIUserInterfaceStyle
Light // 浅色
Dark // 深色
1122.png

【注意】在手机系统设置里设定为深色模式的时候,无法更改StateBar颜色

【2】-假如工程里含有自定义基类控制器BaseViewController,可在其内部做如下设置,类似全局设置;也可以的特定页面里单独设置;【2】不受【1】和用户设置的影响

if (@available(iOS 13.0, *)) {
    self.overrideUserInterfaceStyle = UIUserInterfaceStyleLight;
    self.overrideUserInterfaceStyle = UIUserInterfaceStyleDark;
}

【3】-关于UIView、UIScrollView、UITableView、UITableViewCell、UICollectionView、UICollectionViewCell 等的背景色;UILabel等的字体颜色;在不设置的时候,会受深色和浅色的影响。当设定了特定的颜色或rgb等色值时,是不受影响的;
【4】-特定需要,根据用户的选择,在深色和浅色的变化,动态改变控件背景、字体等颜色;

  if (@available(iOS 13.0, *)) {            
        _tableView.backgroundColor = [UIColor colorWithDynamicProvider:^UIColor * _Nonnull(UITraitCollection * _Nonnull traitCollection) {                
            if ( traitCollection.userInterfaceStyle == UIUserInterfaceStyleLight ) {                    
                return [UIColor redColor];
            }
            else if ( traitCollection.userInterfaceStyle == UIUserInterfaceStyleDark ) {
                return [UIColor blueColor];
            }
            else {
                return [UIColor yellowColor];
            }                
        }];            
    } else {
        // Fallback on earlier versions
    }

【注意】这种类似监听的方式设定的color,首先受【2】,然后【1】的影响,如果没有设置【1】和【2】,受用户设置的影响。

ios13 新添加的类方法和对象方法:

  • (UIColor *)colorWithDynamicProvider:(UIColor * (^)(UITraitCollection *traitCollection))dynamicProvider API_AVAILABLE(ios(13.0), tvos(13.0)) API_UNAVAILABLE(watchos);
  • (UIColor *)initWithDynamicProvider:(UIColor * (^)(UITraitCollection *traitCollection))dynamicProvider API_AVAILABLE(ios(13.0), tvos(13.0)) API_UNAVAILABLE(watchos);

【5】-枚举UIModalPresentationStyle新增属性
UIModalPresentationAutomatic

MySettingVC *vc = [MySettingVC  new];
vc.modalTransitionStyle = UIModalTransitionStylePartialCurl;
vc.modalPresentationStyle = UIModalPresentationAutomatic;
[self presentViewController:vc animated:YES completion:nil];

参见:https://www.jianshu.com/p/24bbeac0dfec
https://www.jianshu.com/p/b73044d42e59

你可能感兴趣的:(适配ios13深色(夜间)和浅色模式及present卡片弹出类型)