我正在使用以下方法为所选标签栏项目设置选择指标。它适用于iPhone 4 / 4s / 5 / 5s但不适用于iphone 6/6 +。
[[UITabBar appearance] setSelectionIndicatorImage:[UIImage imageNamed:@"activeshape.png"] ];
任何建议
答案 0 :(得分:15)
编辑:看来,在所有这个解决方案应该工作之后,我遇到了一些缓存问题
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];
tabHiglight
是一个82x49的png,我已经测试了其他尺寸,但这似乎最合适。
我将框架的width
除以tabBar中的项目数量 - 在我的情况下为5,然后我创建一个新的UIImage" right"大小并将其设置为selectionIndicatorImage
。
答案 1 :(得分:1)
这是我的自动调整UITabBarController
子类。只需提供一个图像,它将适应所有已知的iPhone和iPad。每当特征集合发生变化时,它也会更新大小,因此它支持所有新的iPad功能和旋转。
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
}
}