Ios 从取消选择的选项卡Uitabritem Swift中移除遮罩
我正在尝试使用2个Ios 从取消选择的选项卡Uitabritem Swift中移除遮罩,ios,swift,ios8,uitabbarcontroller,uitabbaritem,Ios,Swift,Ios8,Uitabbarcontroller,Uitabbaritem,我正在尝试使用2个UITabBarItems实现一个UITabBarController。我在故事板中添加了TabBarController。我几乎做到了,但仍然有两个重要问题阻碍了我: 1) 以下是选项卡栏的外观: 请忽略橙色按钮,该按钮不是选项卡项。 所以我放了两个tabItems,我想保留两个选项卡的白色图像,即使其中一个被选中。 我用tintColor,barTintColor检查了很多次,都没有成功 我还尝试在ViewController中设置tabBarItem: override
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上发布详细信息,对吗?所以用户将在那里或这里看到详细信息,而不会被迫下载完整代码。我只是想确定我完全理解你的观点。谢谢