开发中发现,在iOS 11系统下,苹果提供的imagePickerViewController在push进入图片编辑界面PUPhotoPickerHostViewController后,左下角的cancel按钮很难被点击到。
经过反复查看xcode上视图层级结构发现:在iOS11系统下,进入图片编辑界面后,最上层会出现一个细长条的遮盖view(不知道什么原因),是该view遮盖住了左下方的按钮导致按钮很难点击。
下面提供解决方案
由于该遮盖view在不同设备上显示的尺寸不同,因此通过一个宽度的范围去定位该view,然后改变该view的图层结构
iphone 6 上该view的frame为 (0,0,33.75,667)
iphone 6P 上该view的frame为 (0,0,41.400000000000006, 736)
iphone X 上该view的frame为 (0,0,33.75,812)
iPad 上该view的frame为 (0,0,13,768)
更改前的图层
代码如下
-(void)navigationController:(UINavigationController *)navigationController didShowViewController:(UIViewController *)viewController animated:(BOOL)animated
{
if ([UIDevice currentDevice].systemVersion.floatValue < 11)
{
return;
}
if ([viewController isKindOfClass:NSClassFromString(@"PUPhotoPickerHostViewController")])
{
[viewController.view.subviews enumerateObjectsUsingBlock:^(__kindof UIView * _Nonnull obj, NSUInteger idx, BOOL * _Nonnull stop)
{
// iOS 11之后,图片编辑界面最上层会出现一个宽度<42的view,会遮盖住左下方的cancel按钮,使cancel按钮很难被点击到,故改变该view的层级结构
if (obj.frame.size.width < 42)
{
[viewController.view sendSubviewToBack:obj];
*stop = YES;
}
}];
}
}
这样更改后,该遮盖view会被放在下面一层而不是最上层,就不会影响cancel 按钮的点击了。
更改后的图层结构
网友评论