美文网首页
关于iOS14适配问题部分总结

关于iOS14适配问题部分总结

作者: 尼古拉斯佩思 | 来源:发表于2020-09-23 12:04 被阅读0次
    又是一年苹果发布会,苹果更新了新版本的系统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
    <UIStackView: 0x7fdc0270b3c0; frame = (0 0; 0 0);
    layer = <CATransformLayer: 0x600002de3e40>>
    

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

    (lldb) po rootStackView
    <UIStackView: 0x7fa253f0bdc0; frame = (0 0; 0 0);
    layer = <CALayer: 0x600003339440>>
    

    由于我们现在有一个完整的,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适配问题部分总结

          本文链接:https://www.haomeiwen.com/subject/jtwnyktx.html