最近有需求需要在UITabBar上设置网络图片,发现UITabBar的image的size是根据网络返回图片的大小来设置的,在不同分辨率的手机上就会出现图片过大或过小的情况.
通过遍历UITabBar的子视图找到如下解决方案
- (void)modifyTabbarImageViewSize{
for (UIView *subview in self.tabBar.subviews) {
if (![subview isKindOfClass: NSClassFromString(@"UITabBarButton")]) continue;
for (UIView *subsubview in subview.subviews) {
if (![subsubview isKindOfClass: NSClassFromString(@"UITabBarSwappableImageView")]) continue;
CGFloat width = 20;
subsubview.bounds = CGRectMake(0, 0, width, width);
}
}
}
通过遍历找到tabBar上的imageView,在设置imageView的时候,也就是继承了UITabBarController的控制器的viewWillLayoutSubviews
方法里调用上述方法就可以设置imageView的大小了.
但是,当点击tabBar的时候发现图片又变回原本的大小了.
通过查看tabBar的文档,发现了- (void)tabBar:(UITabBar *)tabBar didSelectItem:(UITabBarItem *)item
方法,该方法在点击tabBar的时候会被触发,在此方法里再调用一次modifyTabbarImageViewSize
,问题解决!