iOS 11

iOS11 界面适配

2017-09-15  本文已影响129人  樂亦leeyii

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];
上一篇下一篇

猜你喜欢

热点阅读