開發(fā)中發(fā)現(xiàn),在iOS 11系統(tǒng)下如庭,蘋果提供的imagePickerViewController在push進(jìn)入圖片編輯界面PUPhotoPickerHostViewController后,左下角的cancel按鈕很難被點(diǎn)擊到蒙揣。
經(jīng)過反復(fù)查看xcode上視圖層級(jí)結(jié)構(gòu)發(fā)現(xiàn):在iOS11系統(tǒng)下嗤详,進(jìn)入圖片編輯界面后递宅,最上層會(huì)出現(xiàn)一個(gè)細(xì)長(zhǎng)條的遮蓋view(不知道什么原因)舞痰,是該view遮蓋住了左下方的按鈕導(dǎo)致按鈕很難點(diǎn)擊玷禽。
下面提供解決方案
由于該遮蓋view在不同設(shè)備上顯示的尺寸不同贬丛,因此通過一個(gè)寬度的范圍去定位該view额获,然后改變?cè)搗iew的圖層結(jié)構(gòu)
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之后碾篡,圖片編輯界面最上層會(huì)出現(xiàn)一個(gè)寬度<42的view穆律,會(huì)遮蓋住左下方的cancel按鈕导俘,使cancel按鈕很難被點(diǎn)擊到洛口,故改變?cè)搗iew的層級(jí)結(jié)構(gòu)
? ? ? ? ? ? if (obj.frame.size.width < 42)
? ? ? ? ? ? {
? ? ? ? ? ? ? ? [viewController.view sendSubviewToBack:obj];
? ? ? ? ? ? ? ? *stop = YES;
? ? ? ? ? ? }
? ? ? ? }];
? ? }
}
這樣更改后,該遮蓋view會(huì)被放在下面一層而不是最上層,就不會(huì)影響cancel 按鈕的點(diǎn)擊了。?
更改后的圖層結(jié)構(gòu)?