您好,欢迎来到华拓网。
搜索
您的当前位置:首页iOS 原生分享模块遮挡了视图的解决办法

iOS 原生分享模块遮挡了视图的解决办法

来源:华拓网

UIActivityViewController原生分享模块遮挡了视图的解决办法。
如图,视图加载到KeyWindow,UIActivityViewController类却在夹到中间了。


image.png

方法一:很明显将遮挡的视图加到当前控制器,这样子UIActivityViewController就不会被遮挡了,让我们先试一下。

image.png

这时候发觉,UIActivityViewController是不会被遮挡了,但tabBar区域会遮挡弹框出来的部分图层,即使你将tabBar隐藏了,接着修改当前所有控制器的涂层高度,让它等同于屏幕宽~~然而,这真的是太麻烦了。

随手一试,报错:<UIActivityViewController: 0x7f8222239a00> should have parent view controller。看来系统方法真的不能按着自己的想法来了。

UIWindow * window = [[UIApplication sharedApplication] keyWindow];
        //[window.rootViewController presentViewController:activityVC animated:YES completion:nil];
        [window.rootViewController addChildViewController:activityVC];
        
        UIWindow *keyWindow = [UIApplication sharedApplication].keyWindow;
        UIView *activityView = activityVC.view;
        [keyWindow addSubview:activityView];
weGood[11959:157654] *** Terminating app due to uncaught exception 'UIViewControllerHierarchyInconsistency', reason: 'child view controller:<UIActivityViewController: 0x7f8222239a00> should have parent view controller:(null) but actual parent is:<XDTabBarController: 0x7f8220d125d0>'
*** First throw call stack:

最终解决办法

if(shareImgs.count>1){//调用原生分享
        UIActivityViewController *activityVC = [[UIActivityViewController alloc]initWithActivityItems:shareImgs applicationActivities:nil];
        
        //去除一些不需要的图标选项
        activityVC.excludedActivityTypes = @[UIActivityTypeAirDrop, UIActivityTypePostToWeibo, UIActivityTypePostToTencentWeibo];
        
        //成功失败的回调block
        __weak __typeof(self)weakSelf = self;
        UIActivityViewControllerCompletionWithItemsHandler myBlock = ^(UIActivityType __nullable activityType, BOOL completed, NSArray * __nullable returnedItems, NSError * __nullable activityError) {
            
            [weakSelf.vc.view addSubview:weakSelf];
            UIWindow *keyWindow = [UIApplication sharedApplication].keyWindow;
            [keyWindow addSubview:weakSelf];
            
            if (completed){
                [MBProgressHUD showSuccess:@"谢谢分享!"];
            }else{
                NSLog(@"************Share fail with error %@*********",activityError);
            }
        };
         = myBlock;
        
        
        UIWindow * window = [[UIApplication sharedApplication] keyWindow];
        [window.rootViewController presentViewController:activityVC animated:YES completion:nil];
        
        [self removeFromSuperview];
        [self.vc.view addSubview:self];
    }
image.png

最终图层


image.png

--end.

Copyright © 2019- huatuo3.cn 版权所有

违法及侵权请联系:TEL:199 1889 7713 E-MAIL:2724546146@qq.com

本站由北京市万商天勤律师事务所王兴未律师提供法律服务