ios系統(tǒng)相冊調(diào)用遇到的導(dǎo)航坑

最近幾天在搭建項(xiàng)目的新框架,在調(diào)用系統(tǒng)相冊的時(shí)候(Xcode11)居然遇到了一些UIImagePickerController導(dǎo)航欄的坑,在這里記錄下。

在這里我就不多說調(diào)用相冊和相機(jī)的操作了(基操作,不贅述)。

1.我在彈出UIImagePickerController的時(shí)候如下


在調(diào)用presentViewController方法時(shí)會發(fā)現(xiàn)頂部上面有距離,原因是:蘋果將UIViewController的modalPresentationStyle屬性的默認(rèn)值改成了新加的一個(gè)枚舉值UIModalPresentationAutomatic,對于多數(shù)UIViewController,此值會映射成UIModalPresentationPageSheet。

解決辦法: 可以在vcpresent之前設(shè)置modalPresentationStyle 為 UIModalPresentationFullScreen(imagePickerController.modalPresentationStyle = UIModalPresentationFullScreen;)

2.打開相冊后會發(fā)現(xiàn)整體往上偏移,



這里是我在我的baseVC里面設(shè)置了

if (@available(iOS 11.0, *)) {

? ? ? ? [[UIScrollView appearance] setContentInsetAdjustmentBehavior:UIScrollViewContentInsetAdjustmentNever];

}來防止scrollerView在滑動(dòng)的時(shí)候會在頂部留一個(gè)小的空隙。既然找到這個(gè)問題 ,那我們只需要在相冊彈出時(shí)修改下即可

if (@available(iOS 11, *)) {

? ? ? ? UIScrollView.appearance.contentInsetAdjustmentBehavior = UIScrollViewContentInsetAdjustmentAutomatic;

}


然后在回到我們的app時(shí)重新寫下

if (@available(iOS 11.0, *)) {

? ? ? ? [[UIScrollView appearance] setContentInsetAdjustmentBehavior:UIScrollViewContentInsetAdjustmentNever];

}

ok,問題解決。

3.在present出來相冊控制器上,導(dǎo)航是透明的,用戶體驗(yàn)很不友好。這里我們需要設(shè)置下

#pragma mark--解決UIImagePickerController導(dǎo)航透明問題
- (void)navigationController:(UINavigationController *)navigationController
????? willShowViewController:(UIViewController *)viewController
??????????????????? animated:(BOOL)animated
{
??? if ([navigationController isKindOfClass:[UIImagePickerController class]])
??? { ?
??????? navigationController.navigationBar.translucent = NO;
??????? viewController.navigationController.navigationBar.translucent = NO;
??????? viewController.edgesForExtendedLayout = UIRectEdgeNone;
??????? //設(shè)置成想要的背景顏色
//?????? [navigationController.navigationBar setBarTintColor:RedBackColor];
????
??? }
}

很奇怪的一點(diǎn)是 我這樣設(shè)置了在ios13之前的版本都是沒有問題的,我跑了一下ios13發(fā)現(xiàn)雪崩,毛用沒有。這可以肯定是ios13導(dǎo)航改變導(dǎo)致的。然后我就在上面加了一句

if (@available(iOS 13, *)) {

//? ? ? ? ? [[UINavigationBar appearance]setTranslucent:NO];


? ? ? ? }

好像是解決了這個(gè)bug,但是會有一點(diǎn)瑕疵。

4.修改UIImagePickerController導(dǎo)航右側(cè)取消按鈕

默認(rèn)彈出是英文的,本來以為需要自定義或者重寫下,后面發(fā)現(xiàn)在info里配置個(gè)chinese就可以了。


至此,我這次用個(gè)相冊遇到的問題及解決方法基本都在這了。但是我覺得代碼還是不友好,歡迎遇到類似問題的道友指正。謝謝!

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容