Ios 从取消选择的选项卡Uitabritem Swift中移除遮罩

Ios 从取消选择的选项卡Uitabritem Swift中移除遮罩,ios,swift,ios8,uitabbarcontroller,uitabbaritem,Ios,Swift,Ios8,Uitabbarcontroller,Uitabbaritem,我正在尝试使用2个UITabBarItems实现一个UITabBarController。我在故事板中添加了TabBarController。我几乎做到了,但仍然有两个重要问题阻碍了我: 1) 以下是选项卡栏的外观: 请忽略橙色按钮,该按钮不是选项卡项。 所以我放了两个tabItems,我想保留两个选项卡的白色图像,即使其中一个被选中。 我用tintColor,barTintColor检查了很多次,都没有成功 我还尝试在ViewController中设置tabBarItem: override

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

1) 以下是选项卡栏的外观:

请忽略橙色按钮,该按钮不是选项卡项。 所以我放了两个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) 第二个问题是关于
uitabaritem
类的
selectedImage
属性。 图像的
宽度
不适合该选项卡。我在不同设备之间进行了更改,并且对于每个设备,所选图像都位于另一个选项卡上,或者不适合当前选项卡。(我找到了一个解决方案:每个设备都具有相同的图像,但宽度不同。但这肯定不是一个好的解决方案)

任何形式的帮助都可以!
非常感谢

您需要将渲染模式更改为
UIImageRenderingModeAlways原始
,而不是自动

以下是我如何处理这两个问题的完整示例:

对于第一个问题,我使用
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的代码;)

抱歉,伙计,在我使用renderingMode属性玩了一段时间后,我复制了文本。。。我一直都是原版的,同样的事情也在发生。请确保你的答案是完整的,并且能够独立存在。例如,指向外部存储库的链接可能会中断,并要求人们阅读整个存储库。至少提供一个总结。谢谢@MartijnPieters,我会更新我的答案。分享我的回购协议的外部链接非常容易,而不是编写代码,因为我必须分享太多的细节。。。但我直接在应用程序上发表了明确的评论。再次感谢。外部链接应该支持您的答案,而不是您的答案。如果一个问题只能用比在答案中合理发布的代码更多的代码来回答,那么它应该被关闭,因为太宽了。所以你建议在github上发布详细信息,对吗?所以用户将在那里或这里看到详细信息,而不会被迫下载完整代码。我只是想确定我完全理解你的观点。谢谢