setSelectionIndicatorImage对于iPhone 6和iPhone 6 +而言尺寸不正确

我正在使用以下方法为所选标签栏项目设置select标识。 它适用于iPhone 4 / 4s / 5 / 5s,但不适用于iPhone 6/6 +。

[[UITabBar appearance] setSelectionIndicatorImage:[UIImage imageNamed:@"activeshape.png"] ]; 

任何build议

编辑:似乎毕竟这个解决scheme应该工作,我有一些caching问题

 UIImage *selTab = [[UIImage imageNamed:@"tabHighlight"] imageWithRenderingMode:UIImageRenderingModeAlwaysOriginal]; CGSize tabSize = CGSizeMake(CGRectGetWidth(self.view.frame)/5, 49); UIGraphicsBeginImageContext(tabSize); [selTab drawInRect:CGRectMake(0, 0, tabSize.width, tabSize.height)]; UIImage *reSizeImage = UIGraphicsGetImageFromCurrentImageContext(); UIGraphicsEndImageContext(); // [self.tabBar setSelectionIndicatorImage:reSizeImage]; 

tabHiglighttabHiglight的PNG,我已经testing过其他尺寸,但是这似乎最适合。 我将框架的width除以tabBar中的项目数 – 在我的情况5中,然后创build一个新的“right”大小的UIImage,并将其设置为selectionIndicatorImage

这是我的自动调整的UITabBarController子类。 只要提供一个图像,它会适应所有已知的iPhone和iPad。 它还会在特征集合发生变化时更新大小,以支持所有新的iPadfunction和旋转。

 import UIKit class TabBarController: UITabBarController { override func viewWillAppear(animated: Bool) { super.viewWillAppear(animated) updateSelectionIndicatorImage() } override func traitCollectionDidChange(previousTraitCollection: UITraitCollection?) { super.traitCollectionDidChange(previousTraitCollection) updateSelectionIndicatorImage() } func updateSelectionIndicatorImage() { let width = CGRectGetWidth(tabBar.bounds) > 420 ? 420 : CGRectGetWidth(tabBar.bounds) var selectionImage = UIImage(named: "TabSelectionIndicator") let tabSize = CGSizeMake(width/5, 49) UIGraphicsBeginImageContext(tabSize) selectionImage?.drawInRect(CGRectMake(0, 0, tabSize.width, tabSize.height)) selectionImage = UIGraphicsGetImageFromCurrentImageContext() UIGraphicsEndImageContext() tabBar.selectionIndicatorImage = selectionImage } }