iOS 14.0适配(遇到问题再更新)

1. 定位

14.0增加了「精确位置」的模式,所以也可以‘不’精确,对于那些不需要精确位置的App就可以使用一个大概范围的位置。

注意:在申请定位权限时就会带有 「精确位置-on/off」的开关,如果用户关闭 精确位置,而你的App确实需要精确位置,则需要继续向用户申请「精确位置」 提升的权限,这里只是提升「精确位置」的权限,定位权限还是和以前一样,这里要注意区分。

1-1.png

1.1 精确位置

Info.plist文件增加 keyNSLocationTemporaryUsageDescriptionDictionary
然后在其下面添加 键-值对,用于展示使用 精确位置 的提示内容:

1-2.png

举个例子(请根据自己的实际需求写),键值对如下:

key:"PrecisionLocation",
value: "没错,我就是要使用您的精确位置,没有原因"

1-3.png

注意:这里的 键值对 可以添加多个,针对不同应用场景来使用。比如,某个App里有导航模式、有运动模式,获取 「精确位置」 权限时可以提示不同的内容。

1.2 主动提升「精确位置」权限

- (void)requestTemporaryFullAccuracyAuthorizationWithPurposeKey:(NSString *)purposeKey completion:(void(^ _Nullable)(NSError * _Nullable))completion

主动弹出上面的弹框

CLLocationManager *location = xxxxx; /// 不要提前释放,否则弹框消失
[location requestTemporaryFullAccuracyAuthorizationWithPurposeKey:@"PreciseLocation" completion:^(NSError * _Nullable err) { 
    
    if ( CLAccuracyAuthorizationFullAccuracy ==  location .accuracyAuthorization ) {
        /// 精确位置授权
    } else {
        /// 大概范围,低精度,5km范围
    }
}];

在使用时一定要确保已获得定位的权限

1.3 「精确位置」权限提示内容的国际化

InfoPlist.strings 的语言文件中添加 「PurposeKey」,如本例中的 PrecisionLocation

示例:

  • InfoPlist.strings (English)
    "PreciseLocation" = "fuck your precise location";

  • InfoPlist.strings (Chinese, Simplified)
    "PreciseLocation" = "没错,我就是要使用您的精确位置,没有原因";

    1-4.png

1.4 不需要 「精确位置」的App

对于不需要「精确位置」的App,可以向 Info.plist文件增加key:NSLocationDefaultAccuracyReduced来默认请求大概位置;

issue:我的 plist 文件中该键值对的值类型为string类型,网上一大片文章值类型均为 bool 类型,并设值为 true,我这里无论设置何值「精确位置」开关都会存在,还望各位看官帮我指正一下我的问题所在,在此感谢~

2. UIDatePicker

在 14.0 系统中日期组件默认条件不再是滚轮的样式,即便是设置为滚轮样式布局也会有点小问题。

2.1 iOS 14.0 默认样式如下:

2-1.png
2-2.png

2.2 修改为滚轮样式

    if (@available(iOS 13.4, *)) {
        
        datePicker.preferredDatePickerStyle = UIDatePickerStyleWheels;
    }

修改样式后发现控件有多余的空白

2-3.png

2.3 修复滚轮样式

2-4.png

在注释中我们可以看到,修改样式后可能需要重新调整控件,这里我是使用 frame 的方式布局,所以这里我们在修改为滚轮样式后在设置控件的 frame即可,如图:

if (@available(iOS 13.4, *)) {
        
    datePicker.preferredDatePickerStyle = UIDatePickerStyleWheels;
}
/// set frame
datePicker.frame = CGrectMake(x,y,w,h);

日期控件从此过上了正常的生活...

2-5.png

To be continued...

你可能感兴趣的:(iOS 14.0适配(遇到问题再更新))