1. 定位
14.0增加了「精确位置」的模式,所以也可以‘不’精确,对于那些不需要精确位置的App就可以使用一个大概范围的位置。
注意:在申请定位权限时就会带有 「精确位置-on/off」的开关,如果用户关闭 精确位置,而你的App确实需要精确位置,则需要继续向用户申请「精确位置」 提升的权限,这里只是提升「精确位置」的权限,定位权限还是和以前一样,这里要注意区分。
1.1 精确位置
在 Info.plist文件增加 key:NSLocationTemporaryUsageDescriptionDictionary
然后在其下面添加 键-值对,用于展示使用 精确位置 的提示内容:
举个例子(请根据自己的实际需求写),键值对如下:
key:"PrecisionLocation",
value: "没错,我就是要使用您的精确位置,没有原因"
注意:这里的 键值对 可以添加多个,针对不同应用场景来使用。比如,某个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 不需要 「精确位置」的App
对于不需要「精确位置」的App,可以向 Info.plist文件增加key:NSLocationDefaultAccuracyReduced
来默认请求大概位置;
issue:我的 plist 文件中该键值对的值类型为string类型,网上一大片文章值类型均为 bool 类型,并设值为 true,我这里无论设置何值「精确位置」开关都会存在,还望各位看官帮我指正一下我的问题所在,在此感谢~
2. UIDatePicker
在 14.0 系统中日期组件默认条件不再是滚轮的样式,即便是设置为滚轮样式布局也会有点小问题。
2.1 iOS 14.0 默认样式如下:
2.2 修改为滚轮样式
if (@available(iOS 13.4, *)) {
datePicker.preferredDatePickerStyle = UIDatePickerStyleWheels;
}
😞修改样式后发现控件有多余的空白😞
2.3 修复滚轮样式
在注释中我们可以看到,修改样式后可能需要重新调整控件,这里我是使用 frame 的方式布局,所以这里我们在修改为滚轮样式后在设置控件的 frame即可,如图:
if (@available(iOS 13.4, *)) {
datePicker.preferredDatePickerStyle = UIDatePickerStyleWheels;
}
/// set frame
datePicker.frame = CGrectMake(x,y,w,h);
日期控件从此过上了正常的生活...🍻🍻🍻