我有这个Tab Bar在iOS 8上正常工作但在iOS 7上没有人可以指向我正确的方向,我在加载第一个屏幕时使用JSON文件来配置我的UITabBar。
我是否必须为iOS 7使用不同的图像?
可以改变de Button的大小以避免行为??
iOS 8:
iOS 7:
这是我用来加载图片的代码:
- (void)createTabBar
{
tabController = [self.storyboard instantiateViewControllerWithIdentifier:@"cCustomTabController"];
dValue = [dConfiguration objectForKey:@"Buttons"];
NSMutableArray *aControllers = [[NSMutableArray alloc] init];
int i = 0;
for (NSString* sProperty in dValue) {
NSString* d = @"Details";
NetworkStatus internetStatus = [_reachabilityInfo currentReachabilityStatus];
NSData *itemData = Nil;
if (internetStatus != NotReachable)
itemData = [util getSpecificJsonData:[sProperty valueForKeyPath:@"Item"]];
if(itemData != nil){
UIStoryboard *aStoryboard = [UIStoryboard storyboardWithName:@"Main_iPhone" bundle:[NSBundle mainBundle]];
UIViewController *vcCustom = [aStoryboard instantiateViewControllerWithIdentifier:[util getControllerName:[sProperty valueForKeyPath:@"ViewController"]]];
UIImage *imageBtn = [UIImage imageNamed:[util getImageName:[sProperty valueForKeyPath:@"Image"] andRetrina:[sProperty valueForKeyPath:@"ImageRetina"]]];
UIImage *imageBtnPress = [UIImage imageNamed:[util getImageName:[sProperty valueForKeyPath:@"ImageHeighlighted"] andRetrina:[sProperty valueForKeyPath:@"ImageRetinaHeighlighted"]]];
UITabBarItem *tab = [[UITabBarItem alloc] initWithTitle:[sProperty valueForKeyPath:@"Title"] image:imageBtn selectedImage:imageBtnPress];
UIImage * iSelected = imageBtnPress;
iSelected = [iSelected imageWithRenderingMode:UIImageRenderingModeAlwaysOriginal];
[tab setSelectedImage:iSelected];
tab.tag = i;
if([[sProperty valueForKeyPath:@"Title"] isEqualToString:@"Notificaciones"])
tab.badgeValue=[sProperty valueForKeyPath:@"Badge"];
[vcCustom setTabBarItem:tab];
[vcCustom setTitle:[sProperty valueForKeyPath:@"Title"]];
[aControllers insertObject:navigationController atIndex:i];
i++;
}
else
{
UIStoryboard *aStoryboard = [UIStoryboard storyboardWithName:@"Main_iPhone" bundle:[NSBundle mainBundle]];
UIViewController *vcCustom = [aStoryboard instantiateViewControllerWithIdentifier:[util getControllerName:[sProperty valueForKeyPath:@"ViewController"]]];
UIImage *imageBtn = [UIImage imageNamed:[util getImageName:[sProperty valueForKeyPath:@"Image"] andRetrina:[sProperty valueForKeyPath:@"ImageRetina"]]];
UIImage *imageBtnPress = [UIImage imageNamed:[util getImageName:[sProperty valueForKeyPath:@"ImageHeighlighted"] andRetrina:[sProperty valueForKeyPath:@"ImageRetinaHeighlighted"]]];
UITabBarItem *tab = [[UITabBarItem alloc] initWithTitle:[sProperty valueForKeyPath:@"Title"] image:imageBtn selectedImage:imageBtnPress];
UIImage * iSelected = imageBtnPress;
iSelected = [iSelected imageWithRenderingMode:UIImageRenderingModeAlwaysOriginal];
[tab setSelectedImage:iSelected];
tab.tag = i;
if([[sProperty valueForKeyPath:@"Title"] isEqualToString:@"Notificaciones"])
tab.badgeValue=[sProperty valueForKeyPath:@"Badge"];
[vcCustom setTabBarItem:tab];
[vcCustom setTitle:[sProperty valueForKeyPath:@"Title"]];
UINavigationController *navigationController = [[cCustomNavigationController alloc] initWithRootViewController:vcCustom];
[aControllers insertObject:navigationController atIndex:i];
i++;
}
}
tabController.delegate = self;
tabController.viewControllers = aControllers;
tabController.tabBar.tintColor = [UIColor blackColor];
}
提前致谢。
答案 0 :(得分:1)
确保使用包含@ 1x,@ 2x和@ 3x图像文件的资产目录以支持任何屏幕分辨率。
我个人使用Mark Bridges' Asset Catalog Creator创建我的不同决议。
修改强>
导入多分辨率资产目录后,可以使用[UIImage imageNamed:@"myImage"];
或从界面构建器中选择它。 iOS会自动选择好的。
答案 1 :(得分:0)
确保使用包含@ 1x,@ 2x和@ 3x的资产目录。
例如:
yourimageName@2x~iphone.png for iphone
,
yourimageName@2x~ipad.png for ipad
答案 2 :(得分:-1)
我在代码中更改了这两行:
UIImage *imageBtn = [UIImage imageNamed:[util getImageName:[sProperty valueForKeyPath:@"Image"] andRetrina:[sProperty valueForKeyPath:@"ImageRetina"]]];
UIImage *imageBtnPress = [UIImage imageNamed:[util getImageName:[sProperty valueForKeyPath:@"ImageHeighlighted"] andRetrina:[sProperty valueForKeyPath:@"ImageRetinaHeighlighted"]]];
对于这2:
UIImage *imageBtn = [self changeImageSize:[UIImage imageNamed:[util getImageName:[sProperty valueForKeyPath:@"Image"] andRetrina:[sProperty valueForKeyPath:@"ImageRetina"]]] scaledToSize:CGSizeMake(30, 30)];
UIImage *imageBtnPress = [self changeImageSize:[UIImage imageNamed:[util getImageName:[sProperty valueForKeyPath:@"ImageHeighlighted"] andRetrina:[sProperty valueForKeyPath:@"ImageRetinaHeighlighted"]]] scaledToSize:CGSizeMake(30, 30)];
并添加此功能以更改图像的大小:
- (UIImage *)changeImageSize:(UIImage *)image scaledToSize:(CGSize)newSize {
UIGraphicsBeginImageContextWithOptions(newSize, NO, 0.0);
[image drawInRect:CGRectMake(0, 0, newSize.width, newSize.height)];
UIImage *newImage = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();
return newImage;
}
我不知道这是否正确,但对我来说是有效的。
感谢所有人的快乐编码。