从取消选择的选项卡UITabBarItem Swift中删除蒙版

时间:2015-05-26 13:56:06

标签: ios swift ios8 uitabbarcontroller uitabbaritem

我正在尝试使用UITabBarController来实现UITabBarItems。我在故事板中添加了TabBarController。我几乎做到了,但我仍然被两个重要问题所阻挡:

1)以下是标签栏的外观: enter image description here

请忽略橙色按钮,这不是tabItem。 所以我放了两个tabItems,我想保留两个标签的白色图像,即使其中一个被选中。 我使用tintColorbarTintColor检查过很多次,但没有成功。

我还尝试在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)第二个问题是关于selectedImage类的UITabBarItem属性。 width图片不适合标签。我在设备之间进行了更改,并且对于每个设备,所选图像都在另一个选项卡上,或者不适合当前选项卡。(我找到了一个解决方案:为每个设备提供相同的图像但宽度不同。但是肯定这是不是一个好的解决方案)

second tab selected first tab selected

任何形式的帮助都没问题! 非常感谢

2 个答案:

答案 0 :(得分:0)

您需要将渲染模式更改为UIImageRenderingModeAlwaysOriginal而不是自动。

答案 1 :(得分:0)

以下是我如何管理这两个问题的完整示例: https://github.com/AndreiBoariu/TabBarController

对于第一个问题,我在for类中使用此UITabBarController循环解决了问题:

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中的代码;)