这是Apple官方的尺寸要求,对应不同的屏幕尺寸,可用48*48在iPhone6模拟器上会出现图标过大的问题。
注:开发环境为Xcode 7.0 beta 1
我尝试调整了tabbar item的Image insets,将未选中状态下的图片调整到了合适的大小,但当我运行程序时发现,当图标被点击的时候,图片会恢复成默认大小,即图标过大。
而且此时我并未选择selected Image,而当我选择了selected Image之后又出现点击后图片消失的Bug..
我弃用StoryBoard开始尝试用纯代码实现,结果遇到同样的问题,查资料后发现这样一个方法:
+ (UIImage *)reSizeImage:(UIImage *)image toSize:(CGSize)reSize
UIGraphicsBeginImageContext(CGSizeMake(reSize.width, reSize.height));
[image drawInRect:CGRectMake(0, 0, reSize.width, reSize.height)];
UIImage *reSizeImage = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();
return reSizeImage;
将原图片在新的Size下重新绘制,然后将使用调整过的图标。
而且在使用该方法之前一定要把原先在StoryBoard中选择的ImageInset调为零,即便是删掉相关Segue之后ImageInset仍然会保持为之前的设置值,Clean project也并没有什么用。
如果使用原图片而采用Image insets调整大小未重复选中时正常,每选中一次Image insets就会调用一次,导致图片越来越小最后消失。
使用UIImage的imageWithRenderingMode方法可以避免原生TabBar对图片的修改,在需要非系统蓝图片时会用到。
最终解决方法,下载64*64的图片,将其拖到@2x位置。
将高分辨率的图片放在@1x位置,如系统需要调用@2x时就会自动将其放大,导致图片过大,采用reSizeImage方法将图片进行重新绘制之后会出现清晰度下降的情况。