找到问题根源 之前为了适配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
网友评论
-(void)viewWillAppear:(BOOL)animated{
[super viewWillAppear:animated];
self.edgesForExtendedLayout = UIRectEdgeAll;
}
修正上个界面 的坐标零点
picker.sourceType = UIImagePickerControllerSourceTypePhotoLibrary;
picker.delegate = self;
// 去除毛玻璃效果
picker.navigationBar.translucent = NO;
self.edgesForExtendedLayout = UIRectEdgeNone;
picker.sourceType=UIImagePickerControllerSourceTypePhotoLibrary;
[self presentViewController:picker animated:YES completion:nil];
现在不被遮挡了 但是每次回退上个界面 导航条都是黑色的 求老哥帮忙