使用FDFullscreenPopGesture遇到的坑以及解決方法

最近需要給APP添加手勢(shì)左滑返回功能,使用了框架FDFullscreenPopGesture,把使用過程中遇到的坑以及解決方法記錄下

2018-05-03 更新------

當(dāng)使用相機(jī)進(jìn)行拍攝的時(shí)候,頁(yè)面的上方看不見了,閃光燈功能使用不了,所以添加了如下判斷:

    // 設(shè)置導(dǎo)航的顯示/隱藏
    dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(CGFLOAT_MIN * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{
        UIViewController *vc = [self.navigationController.viewControllers lastObject];
        // 添加對(duì)相機(jī)拍攝的過濾
        if ([self.navigationController isKindOfClass:[UIImagePickerController class]]
            ) {
            UIImagePickerController *imagePickVC = (UIImagePickerController *)self.navigationController;
            // 不是相機(jī)才進(jìn)行處理
            if (imagePickVC.sourceType != UIImagePickerControllerSourceTypeCamera) {
                [self _handleVCNavigationBarHidden:vc];
            }
        } else {
            // 不是相機(jī)才進(jìn)行處理
            [self _handleVCNavigationBarHidden:vc];
        }
    });

- (void)_handleVCNavigationBarHidden:(UIViewController *)vc {
    [self.navigationController setNavigationBarHidden:vc.fd_prefersNavigationBarHidden animated:NO];
}

一、UIWebView無法左滑返回

原因:UIWebView默認(rèn)是不開啟左滑手勢(shì)返回功能的,需要自己開啟;
解決:在viewDidLoad方法里面設(shè)置屬性fd_interactivePopDisabledNO;

- (void)viewDidLoad
{
    [super viewDidLoad];
    self.fd_interactivePopDisabled = NO;
}

二、UIWebView左滑返回沒有成功時(shí)或者取消返回時(shí)導(dǎo)航欄的title文字為空,不見了

原因:在viewWillDisappear:方法里面UIWebView控件被銷毀了;

ScanWebView = nil;

解決:

方法一: 最直接有效

viewWillDisappear:方法里面取消UIWebView控件的銷毀;即把這行代碼注釋掉;ScanWebView = nil;//注釋掉

方法二: 比較復(fù)雜

webViewDidFinishLoad:方法里面用一個(gè)變量保存獲取的title文字,在viewWillAppear:方法里面設(shè)置導(dǎo)航欄的title文字;

1、保存title文字的變量

@property (nonatomic, copy) NSString *titleString; //保存title文字的變量

2、設(shè)置導(dǎo)航欄的title文字
- (void)viewWillAppear:(BOOL)animated{ //設(shè)置導(dǎo)航欄的title文字
    [super viewWillAppear:animated];
    self.titleLabel.text = self.titleString;
}
3、用變量保存獲取到的title文字
- (void)webViewDidFinishLoad:(UIWebView *)webView{ //用變量保存獲取到的title文字
    NSString *title = [webView stringByEvaluatingJavaScriptFromString:@"document.title"];
    self.titleString = title;
}

三、左滑返回沒有成功或者取消時(shí),會(huì)出現(xiàn) ... 的情況

原因:導(dǎo)航控制器的導(dǎo)航欄默認(rèn)是有一個(gè)返回按鈕的;設(shè)置屬性hidesBackButtonYES就會(huì)出現(xiàn)這種情況;

解決:設(shè)置屬性hidesBackButtonNO,或者直接注釋掉這行代碼,不進(jìn)行設(shè)置;

self.navigationItem.hidesBackButton = NO;

四、從無NavigationBar到有NavigationBar,手勢(shì)返回的時(shí)候,有NavigationBar的控制器導(dǎo)航欄會(huì)變成白色,或者消失不見了;

原因:在滑動(dòng)的時(shí)候顯示出錯(cuò)

解決:
viewWillAppear:viewWillDisappear:方法里面添加對(duì)是否隱藏NavigationBar的判斷;

dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(CGFLOAT_MIN * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{
    UIViewController *vc = [self.navigationController.viewControllers lastObject];
    if (vc.fd_prefersNavigationBarHidden) {
        [self.navigationController setNavigationBarHidden:YES animated:NO];
    } else {
        [self.navigationController setNavigationBarHidden:NO animated:NO];
    }
});

五、調(diào)用系統(tǒng)的發(fā)送短信控制器MFMessageComposeViewController時(shí)(如使用shareSDK進(jìn)行短信分享時(shí)),右上角沒有“取消按鈕”,無法返回app

原因:好像被擋住了

解決:添加對(duì)控制器是否是MFMessageComposeViewController的判斷,是的話添加自己添加一個(gè)取消按鈕并添加方法的實(shí)現(xiàn),

if ([self isKindOfClass:[MFMessageComposeViewController class]]) {
    [self fd_pushViewController:viewController animated:animated];
    [[self.viewControllers lastObject] navigationItem].rightBarButtonItem = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemCancel target:self action:@selector(dismissModal:)];
    return;
}
- (void)dismissModal:(UIButton *)sender{
    [[self.viewControllers lastObject] dismissViewControllerAnimated:YES completion:nil];
}

以上為使用過程遇到的坑以及解決辦法,很多也都是從GitHub搜集而來的,建議多到GitHub去看看;

附上FDFullscreenPopGestureGitHub鏈接;

最后貼上在FDFullscreenPopGesture基礎(chǔ)上修改后的代碼:

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

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

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