美文网首页iOS开发中填坑工具iOS开发
iOS11 系统适配中遇到的问题(1)UIImagePicker

iOS11 系统适配中遇到的问题(1)UIImagePicker

作者: Farmers | 来源:发表于2017-11-22 16:16 被阅读769次

    找到问题根源 之前为了适配iOS11 做了个全局处理 

     // AppDelegate 进行全局设置

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

    [[UIScrollView appearance] setContentInsetAdjustmentBehavior:UIScrollViewContentInsetAdjustmentNever];

    }

    会引起相册UI偏移 , 如果出现问题 解决办法如下:

    一。今天在做iOS11的适配工作,发现用户更换头像时 调起相册 iOS11 中的照片向上偏移 被导航栏遮挡,而在iOS10,9 ,8中的表现正常 效果如下图所示:

    iOS11中调起相册效果 iOS9中调起相册效果

    原程序中的代码如下:

    UIImagePickerController* picker = [[UIImagePickerControlleralloc]init];

    picker.delegate=self;

    picker.allowsEditing=YES;

    picker.sourceType=UIImagePickerControllerSourceTypePhotoLibrary;

    [selfpresentViewController:pickeranimated:YEScompletion:^{

    }];

    从这段代码看 没有什么问题,常规的获取相册中的图片操作,这里记录下临时的解决方法:

    picker.navigationBar.translucent=NO;

    这里将原来导航栏的 半透明效果去除  那么相册的 布局坐标默认就从  导航栏的下面开始,算是临时解决了下

    二 .对于html5 中的点击从相册中读取照片上传服务器的操作 , 会出现同样的bug。对于该问题本人通过获取当前屏幕中present出来的viewcontroller 

    - (UIViewController*)getPresentedViewController

    {

    UIViewController*appRootVC = [UIApplicationsharedApplication].keyWindow.rootViewController;

    UIViewController*topVC = appRootVC;

    if(topVC.presentedViewController) {

    topVC = topVC.presentedViewController;

    }

    returntopVC;

    }

    然后在 viewWillDisappear 中添加

    if([[self getPresentedViewController]isKindOfClass:[UIImagePickerController class]]) {

    UIImagePickerController* pickerVC = (UIImagePickerController*)[self getPresentedViewController];

    pickerVC.navigationBar.translucent=NO;

    }

    附上 关于edgesForExtendedLayout浅淡   http://www.jianshu.com/p/ca3c5a94c32b

    相关文章

      网友评论

      • 1258fdbb8c98:这样搞了,编辑模式下,选取图片时,对框对不准确,选取的图片还有可能会有黑边?怎么解决?
        Farmers:@taylorX 方便提供一个demo么?
        1258fdbb8c98:@Farmers 用手机相机照一张图片,然后从相册中获取图片,选取刚刚照的那张图片,编辑模式下,看下选取的那张图片。只要picker.navigationBar.translucent = NO;//导航不透明。选取的图片有可能黑边
        Farmers:亲测并未发现你说的对框不准 以及黑边问题
      • daxiaomao:picker.navigationBar.translucent=NO; 这样写导航条会黑一下怎么解决
        Farmers:@daxiaomao
        -(void)viewWillAppear:(BOOL)animated{

        [super viewWillAppear:animated];
        self.edgesForExtendedLayout = UIRectEdgeAll;
        }
        修正上个界面 的坐标零点
        daxiaomao:@Farmers UIImagePickerController * picker = [[UIImagePickerController alloc]init];
        picker.sourceType = UIImagePickerControllerSourceTypePhotoLibrary;
        picker.delegate = self;
        // 去除毛玻璃效果
        picker.navigationBar.translucent = NO;
        self.edgesForExtendedLayout = UIRectEdgeNone;
        picker.sourceType=UIImagePickerControllerSourceTypePhotoLibrary;

        [self presentViewController:picker animated:YES completion:nil];
        现在不被遮挡了 但是每次回退上个界面 导航条都是黑色的 求老哥帮忙
        Farmers:iOS7之后由于navigationBar.translucent默认是YES,坐标零点默认在(0,0)点 当不透明的时候,零点坐标在(0,64);如果你想设置成透明的,而且还要零点从(0,64)开始,那就添加:self.edgesForExtendedLayout = UIRectEdgeNone; 你应该是加了这行代码吧

      本文标题:iOS11 系统适配中遇到的问题(1)UIImagePicker

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