从取消选中的选项卡中删除蒙版UITabBarItem Swift
我正在试图与2 UITabBarItems
实现一个UITabBarItems
。 我在故事板中添加了TabBarController。 我几乎做到了,但是我仍然被两个重要问题所阻止:
1)这是标签栏的外观:
请忽略橙色button,这不是一个tabItem。 所以我把两个tabItems,我想保留两个选项卡的白色图像,即使他们中的一个被选中。 我用tintColor
, barTintColor
检查了很多次,没有成功。
另外我试图在ViewController中设置tabBarItem:
override func awakeFromNib() { super.awakeFromNib() let imgHome = UIImage(named: "btnHome")?.imageWithRenderingMode(UIImageRenderingMode.AlwaysOriginal) let imgProfile = UIImage(named: "btnProfile")?.imageWithRenderingMode(UIImageRenderingMode.AlwaysOriginal) let imgSelectedTab = UIImage(named: "selectedTab_imgBackground")?.imageWithRenderingMode(UIImageRenderingMode.AlwaysOriginal) tabBarItem = UITabBarItem(title: nil, image: imgProfile, selectedImage: imgSelectedTab) }
但没有成功。 在这个问题上的任何想法?
2)第二个问题是关于UITabBarItem
类的selectedImage
属性。 图像的width
不符合标签。 我改变了设备之间,并为每个设备选定的图像是在另一个选项卡上,或不符合当前选项卡(我find了一个解决scheme:具有相同的图像,但不同宽度的每个设备,但肯定这是不是一个好的解决scheme
任何forms的帮助都可以! 非常感谢
您需要将渲染模式更改为UIImageRenderingModeAlwaysOriginal
而不是自动。
以下是我如何pipe理这两个问题的完整示例: https : //github.com/AndreiBoariu/TabBarController
对于第一个问题 ,我解决for
在UITabBarController
类中使用这个for
循环:
for item in tabBar.items as! [UITabBarItem] { if let image = item.image { item.image = image.imageWithColor(UIColor.whiteColor()).imageWithRenderingMode(.AlwaysOriginal) } }
这里是UIImage
的扩展
public extension UIImage { func imageWithColor(tintColor: UIColor) -> UIImage { UIGraphicsBeginImageContextWithOptions(self.size, false, self.scale) let context = UIGraphicsGetCurrentContext() as CGContextRef CGContextTranslateCTM(context, 0, self.size.height) CGContextScaleCTM(context, 1.0, -1.0); CGContextSetBlendMode(context, kCGBlendModeNormal) let rect = CGRectMake(0, 0, self.size.width, self.size.height) as CGRect CGContextClipToMask(context, rect, self.CGImage) tintColor.setFill() CGContextFillRect(context, rect) let newImage = UIGraphicsGetImageFromCurrentImageContext() as UIImage UIGraphicsEndImageContext() return newImage } }
对于第二个问题 ,请检查来自github的代码;)