如何自定义单个标签栏项目的外观?
问题描述:
答
您应该子类UITabBarController
并更改内的items
阵列中第三个UITabBarItem
的外观。
class CustomTabBarController: UITabBarController {
override func awakeFromNib() {
super.awakeFromNib()
guard let items = tabBar.items else {
return
}
for i in 0 ..< items.count {
item.image = image
item.selectedImage = selectedImage
[...]
}
}
}
答
Take a subclass of TabbarController.Remember to call `<UITabBarControllerDelegate>`
func viewDidAppear(_ animated: Bool) {
super.viewDidAppear(animated)
//
tabBar.selectionIndicatorImage = returnImageofSelectetab()
}
//Method called everytime when you select tab.
func tabBarController(_ tabBarController: UITabBarController, didSelect viewController: UIViewController) {
if tabBarController.tabBar.selectionIndicatorImage == nil {
print("Starting point delegate: Selection indicator image is nill")
}
else {
print("Starting Point Of delegate: Selection indicator image is available")
}
//HERE i gave index where I want to set image.
if tabBarController.selectedIndex == 2 {
tabBarController.tabBar.selectionIndicatorImage = nil
}
else {
tabBarController.tabBar.selectionIndicatorImage = returnImageofSelectetab()
}
if tabBarController.tabBar.selectionIndicatorImage == nil {
print("Ending point delegate: Selection indicator image is nill")
}
else {
print("Ending Point Of delegate: Selection indicator image is available")
}
}
func returnImageofSelectetab() -> UIImage {
//HERE 'img_sel' is YOUR SELECTED IMAGE SET AS BACKGROUND OF YOUR TABBARITEM
let selTab = UIImage(named: "img_sel")?.withRenderingMode(.alwaysOriginal)
let tabSize = CGSize(width: view.frame.width/5, height: 49)
UIGraphicsBeginImageContext(tabSize)
selTab?.draw(in: CGRect(x: 0, y: 0, width: tabSize.width, height: tabSize.height))
let reSizeImage: UIImage? = UIGraphicsGetImageFromCurrentImageContext()
UIGraphicsEndImageContext()
return reSizeImage!
}
我有答案,但在目标C。你可以设置该选项卡的setSelectionIndicatorImage。您必须创建图像并将其设置为setSelectionIndicatorImage选定的选项卡,而对于其他选项卡则为零或您想要设置 –
如果可以,请将其作为答案发布在objective-c中。如果它能正常工作,我会试着标记为正确的。谢谢你的评论 – user3400881
好吧,我会尝试将它转换成Swift –