美文网首页ios基础可能会用到IOS
使用FDFullscreenPopGesture遇到的坑以及解决

使用FDFullscreenPopGesture遇到的坑以及解决

作者: oceanfive | 来源:发表于2017-03-06 16:16 被阅读563次

    最近需要给APP添加手势左滑返回功能,使用了框架FDFullscreenPopGesture,把使用过程中遇到的坑以及解决方法记录下

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

    当使用相机进行拍摄的时候,页面的上方看不见了,闪光灯功能使用不了,所以添加了如下判断:

        // 设置导航的显示/隐藏
        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 ([self.navigationController isKindOfClass:[UIImagePickerController class]]
                ) {
                UIImagePickerController *imagePickVC = (UIImagePickerController *)self.navigationController;
                // 不是相机才进行处理
                if (imagePickVC.sourceType != UIImagePickerControllerSourceTypeCamera) {
                    [self _handleVCNavigationBarHidden:vc];
                }
            } else {
                // 不是相机才进行处理
                [self _handleVCNavigationBarHidden:vc];
            }
        });
    
    - (void)_handleVCNavigationBarHidden:(UIViewController *)vc {
        [self.navigationController setNavigationBarHidden:vc.fd_prefersNavigationBarHidden animated:NO];
    }
    

    一、UIWebView无法左滑返回

    原因:UIWebView默认是不开启左滑手势返回功能的,需要自己开启;
    解决:在viewDidLoad方法里面设置属性fd_interactivePopDisabledNO;

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

    二、UIWebView左滑返回没有成功时或者取消返回时导航栏的title文字为空,不见了

    原因:在viewWillDisappear:方法里面UIWebView控件被销毁了;

    ScanWebView = nil;

    解决:

    方法一: 最直接有效

    viewWillDisappear:方法里面取消UIWebView控件的销毁;即把这行代码注释掉;ScanWebView = nil;//注释掉

    方法二: 比较复杂

    webViewDidFinishLoad:方法里面用一个变量保存获取的title文字,在viewWillAppear:方法里面设置导航栏的title文字;

    1、保存title文字的变量

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

    2、设置导航栏的title文字
    - (void)viewWillAppear:(BOOL)animated{ //设置导航栏的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;
    }
    

    三、左滑返回没有成功或者取消时,会出现 ... 的情况

    原因:导航控制器的导航栏默认是有一个返回按钮的;设置属性hidesBackButtonYES就会出现这种情况;

    解决:设置属性hidesBackButtonNO,或者直接注释掉这行代码,不进行设置;

    self.navigationItem.hidesBackButton = NO;

    四、从无NavigationBar到有NavigationBar,手势返回的时候,有NavigationBar的控制器导航栏会变成白色,或者消失不见了;

    原因:在滑动的时候显示出错

    解决:
    viewWillAppear:viewWillDisappear:方法里面添加对是否隐藏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];
        }
    });
    

    五、调用系统的发送短信控制器MFMessageComposeViewController时(如使用shareSDK进行短信分享时),右上角没有“取消按钮”,无法返回app

    原因:好像被挡住了

    解决:添加对控制器是否是MFMessageComposeViewController的判断,是的话添加自己添加一个取消按钮并添加方法的实现,

    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基础上修改后的代码:

    相关文章

      网友评论

      • Riven2018:楼主,问一下第四点为什么要用延时处理呢?
      • dlxfly:从无导航栏到有导航栏是时, 页面加载有导航栏的页面时 ,导航栏和页面加载速度不一致(导航栏快),能否解决?
      • JTomLee:感谢分享❤️
      • 鬼丶白:你好博主 我在分享的时候加上了你提供的代码 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;
        }

        发现取消后界面卡死了怎么办啊
        oceanfive:@soime 我倒没遇到过,你试试用instrument 看看内存情况,内存有飙升没,是哪句代码引起的

      本文标题:使用FDFullscreenPopGesture遇到的坑以及解决

      本文链接:https://www.haomeiwen.com/subject/frdugttx.html