关于iOS14适配问题部分总结

又是一年苹果发布会,苹果更新了新版本的系统iOS14。就我个人来说的话系统耗电有优化,小程序类似部件化APP体验也不错,还有优化了权限提示和麦克风,摄像头采集的圆点提示。总体来说还算OK,就开发者而言就有点奔溃了。。。

1.关于KVC访问私有属性:

UIDatePicker时间滚轮在之前是可以通过KVC来访问私有属性 设置文本颜色,字体等之类的属性 例如

  [datePicker setValue:UIColor.blackColor forKey:@"textColor"];

现在已经不再可以修改文本颜色了,并且出现新的日历选择模式(新模式样式看起来不错)

image.png

通过preferredDatePickerStyle来控制样式。

datePicker.locale = [[NSLocale alloc] initWithLocaleIdentifier:@"zh_CN"];//新发现这里不会根据系统的语言变了
 datePicker.preferredDatePickerStyle = UIDatePickerStyleWheels;

所以要进行定制化UIDatePicker的可以选择自行封装UIPikerView来进行代替,关于demo我已经完成:swift代码地址、 OC代码地址

我和我同事的讨论可能是由于出于安全行考虑,苹果开始逐步限制通过KVC方式来访问控件私有属性,毕竟经历过iOS13UITextField私有属性访问的毒打,连夜发布版本一度让我怀疑人生,讨论过大龄程序员转行的必要性~

说说UIPageControl这个控件在iOS14上取消了currentPageImage属性和pageImage属性,所以如果通过KVC继续访问将会崩溃。

     [page setValue:[UIImage imageNamed:@"scroll_n"] forKeyPath:@"_pageImage"];
     [page setValue:[UIImage imageNamed:@"scroll_s"] forKeyPath:@"_currentPageImage"];

你可以通过currentPageIndicatorTintColorpageIndicatorTintColor来修改纯色的图片

if (@available(iOS 14 ,*)) {
            page.currentPageIndicatorTintColor = UIColor.blueColor;
            page.pageIndicatorTintColor        = UIColor.grayColor;
        }else {
            [page setValue:[UIImage imageNamed:@"scroll_n"] forKeyPath:@"_pageImage"];
            [page setValue:[UIImage imageNamed:@"scroll_s"] forKeyPath:@"_currentPageImage"];
        }

当然苹果也推出了新属性:

/// The preferred image for indicators. Symbol images are recommended. Default is nil.
@property (nonatomic, strong, nullable) UIImage *preferredIndicatorImage API_AVAILABLE(ios(14.0));

2.UIStackView变化:

在iOS 14中,UIStackView已从使用更改CATransformLayer为使用CALayer,如果在调试器中检查堆栈视图,则可以看到此信息。首次在iOS 13上运行(请注意layer属性):

(lldb) po rootStackView
>

然后在iOS 14上,我们现在有一个CALayer

(lldb) po rootStackView
>

由于我们现在有一个完整的,CALayer我们还可以设置其他属性,例如cornerRadius在堆栈视图层上,我们可以直接为iOS 14和后备设置直接设置背景颜色和边角半径,以手动添加背景视图

if #available(iOS 14.0, *) {
  stackView.backgroundColor = .systemPurple
  stackView.layer.cornerRadius = 10.0
} else {
  // Fallback to manually adding
  // background view
}

这部分引用了 Stack View Background Color in iOS 14

3.关于UITableViewCell.contentView:

苹果公司的代码注释上写的:should be added to the content view

// Custom subviews should be added to the content view.
@property (nonatomic, readonly, strong) UIView *contentView;

所以之前我们可以直接将视图添加在cell上:

 [self addSubview:self.titleLabel];

而不是:

[self.contentView addSubview:self.titleLabel];

以后如果视图直接添加在cell上将会导致添加的视图手势,点击事件无法生效,这个是我同事和其他人告诉我的

4.关于系统授权问题:

可以参考 iOS14 隐私适配及部分解决方案来自于没八阿哥的程序

你可能感兴趣的:(关于iOS14适配问题部分总结)