我有一个UITabBarController,在其中使用此代码来设置选择指示器图像:
let selectedBG = UIImage(named:"tabbarbgtest.png")?.resizableImageWithCapInsets(UIEdgeInsetsMake(0, 0, 0, 0)) UITabBar.appearance().selectionIndicatorImage = selectedBG
但是该图像不能填充整个空间-请参见下图:
图像只是一个红色的正方形,分辨率为82x49px,但是图像较宽时,它仍然无法填充整个空间。希望你们能提供帮助-谢谢。
如果要在选项卡选择上设置红色图像,我建议您设置活动的选项卡栏项目的背景颜色,根据我的意见,只要您可以使用编码进行编码,为什么要使用图像,因此最好设置选择颜色,而不是图片。您可以使用以下代码来实现。
// set red as selected background color let numberOfItems = CGFloat(tabBar.items!.count) let tabBarItemSize = CGSize(width: tabBar.frame.width / numberOfItems, height: tabBar.frame.height) tabBar.selectionIndicatorImage = UIImage.imageWithColor(color: UIColor.red, size: tabBarItemSize).resizableImage(withCapInsets: .zero) // remove default border tabBar.frame.size.width = self.view.frame.width + 4 tabBar.frame.origin.x = -2
利用以下扩展UIImage:
UIImage
extension UIImage { class func imageWithColor(color: UIColor, size: CGSize) -> UIImage { let rect: CGRect = CGRect(x: 0, y: 0, width: size.width, height: size.height) UIGraphicsBeginImageContextWithOptions(size, false, 0) color.setFill() UIRectFill(rect) let image: UIImage = UIGraphicsGetImageFromCurrentImageContext()! UIGraphicsEndImageContext() return image } }
希望对您有所帮助。
或 其他方式:
在您的tabBarController中,您可以设置图像的默认UITabBar tintColor,barTintColor,selectionIndicatorImage(在此处作一些说明)和renderingMode,请参见以下注释:
class MyTabBarController: UITabBarController, UINavigationControllerDelegate { ... override func viewDidLoad() { ... // Sets the default color of the icon of the selected UITabBarItem and Title UITabBar.appearance().tintColor = UIColor.red // Sets the default color of the background of the UITabBar UITabBar.appearance().barTintColor = UIColor.black // Sets the background color of the selected UITabBarItem (using and plain colored UIImage with the width = 1/5 of the tabBar (if you have 5 items) and the height of the tabBar) UITabBar.appearance().selectionIndicatorImage = UIImage().makeImageWithColorAndSize(color: UIColor.blue, size: CGSize(width: tabBar.frame.width/5, height: tabBar.frame.height)) // Uses the original colors for your images, so they aren't not rendered as grey automatically. for item in (self.tabBar.items)! { if let image = item.image { item.image = image.withRenderingMode(.alwaysOriginal) } } } ... }
您将需要扩展UIImage类,以制作具有所需大小的纯色图像:
extension UIImage { func makeImageWithColorAndSize(color: UIColor, size: CGSize) -> UIImage { UIGraphicsBeginImageContextWithOptions(size, false, 0) color.setFill() UIRectFill(CGRect(x: 0, y: 0, width: size.width, height: size.height)) let image = UIGraphicsGetImageFromCurrentImageContext() UIGraphicsEndImageContext() return image! } }