剪裁部分就不说了, 网上很多,
问题是这样的,在调用系统的裁剪后, 裁剪完成后的图片不是之前选定的区域,会下移20个pt值,这是是iOS 11后的bug,有看到网友分享一个隐藏状态栏,确实可以解决,但是这个隐藏时机一开始摸不着头脑,粗暴的在UIImagePickerController出现时就隐藏那也是OK的, 只是不够优雅, (隐藏状态的方法,这里有传送门)
这儿分享一个自己摸索出来的解决方案,
刚开始的思路是寻找PickerVC中的图片点击方法,在其跳转到裁剪页面时来隐藏,返回时有显示,可惜苹果似乎没有提供点击的api,想想确实也没必要....
不过我想这个方向是对的,虽然也是有点挫,
在看API的时候注意到ImagePickerVC 遵循两个代理 UIImagePickerControllerDelegate 和 UINaviigationControllerDelegate
其中navDelegate 中有这个代理方法
- (void)navigationController:(UINavigationController *)navigationController willShowViewController:(UIViewController *)viewController animated:(BOOL)animated {
if ([navigationController.viewControllers count] == 3) {
[[UIApplication sharedApplication] setStatusBarHidden:YES];
}else {
[[UIApplication sharedApplication] setStatusBarHidden:NO];
}
if ([viewController isKindOfClass:NSClassFromString(@"PUUIImageViewController")]) {
[viewController setNeedsStatusBarAppearanceUpdate];
}
}
在其中来判断是否跳转到了剪裁页面, 适时的隐藏和显示状态栏就OK了, 由于我打印了其中的VC的类名,都为PUUIImageViewController,所以我用判断数量的方法来做, 如果你有更好的方案,欢迎分享哈~
不知为何,打印可能出来问题, 我之后再看打印又是显示三种
"<PUUIAlbumListViewController: 0x7faecc0d5000>",
"<PUUIPhotosAlbumViewController: 0x7faeca892c00>",
"<PUUIImageViewController: 0x7faeccc70010>"
所以,用判断类名最合适不过啦~~
最新修改就是: iOS11以上是无法获取那个类名的, 所以还是用判断数量的吧.....