iOS11 UINavigationBar界面图层发生变化
原来的UIBarButtonItem是直接添加到navigationBar上面
iOS11则由添加了_UINavigationBarContentView管理UIBarButtonItem.
在我的应用中更新到iOS11发现导航栏的item显示发生错误.
原因是图片的原始尺寸大于控件的尺寸,在iOS11之前我的解决方案是L
//iOS11之前解决方法
UIButton *leftBtn=[[UIButton alloc] initWithFrame:CGRectMake(0, 0, 30, 30)];
[leftBtn addTarget:self action:@selector(leftBtn) forControlEvents:UIControlEventTouchUpInside];
[leftBtn setBackgroundImage:[UIImage imageNamed:@"ic_launcher"] forState:UIControlStateNormal];
UIBarButtonItem *leftItem = [[UIBarButtonItem alloc] initWithCustomView:leftBtn];
通过button的对图片进行压缩,使图片显示能够如我期望的那样.
但是在iOS11之后添加_UIButtonBarStackView之后,我发现上面的方法失效了,不会对图片进行压缩了(具体原因还不清楚), 这个方法是行不通了,那就需要解决方案:
有两个解决方案:
1.自己手动实现图片压缩,通过给UIImage添加分类
- (UIImage *)reSizeImagetoSize:(CGSize)reSize
{
UIGraphicsBeginImageContextWithOptions(reSize, NO, 0);
[self drawInRect:CGRectMake(0, 0, reSize.width, reSize.height)];
UIImage *reSizeImage = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();
return reSizeImage;
}
2.通过工具生成需要的尺寸的图片.
最好就是UI给图片尺寸就是需要的大小.(可惜我们不是....惨/(ㄒoㄒ)/~~)
//iOS11实现方案 只需要改变这一个方法,其他方法不变
[leftBtn setBackgroundImage:[[UIImage imageNamed:@"ic_launcher"] reSizeImagetoSize:CGSizeMake(30, 30)] forState:UIControlStateNormal];
网友评论