美文网首页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