【问题标题】:how to customize tabbar items which is added on storyboard如何自定义添加到情节提要上的标签栏项目
【发布时间】:2017-06-21 13:47:02
【问题描述】:

我制作了 UITabbar 控制器并在 Storyboard 上制作了 5 个标签栏按钮。

但我无法控制标签栏项目中的图像大小和颜色。 我想使用 PNG 文件自定义按钮颜色和形状,而不是使用默认颜色。

但是下面的代码除了 tabbar tintcolor 之外运行不正常。

class MainView: UITabBarController {

override func viewDidLoad() {
    super.viewDidLoad()

    tabBar.barTintColor = UIColor.white

}

override func tabBar(_ tabBar: UITabBar, didSelect item: UITabBarItem) {
    switch item.tag{
    case 0:
        print(item.tag)
        UITabBar.setItems(item[0]) = UITabBarItem(title: "Magzine", image: UIImage(named: "exhibiter.png"), selectedImage: UIImage(named: "exhibiterselected.png"))
    case 1:
        print("")
    case 2:
        print("")
    case 3:
        print("")
    case 4:
        print("")
    default:
        break
    }
}

override func viewWillAppear(_ animated: Bool) {
    UIApplication.shared.isStatusBarHidden = false
}

override func didReceiveMemoryWarning() {
    super.didReceiveMemoryWarning()
}

}

【问题讨论】:

  • 使用标签栏项目在情节提要中设置默认值并选择图像,然后将图像渲染模式设置为原始检查此答案以供参考stackoverflow.com/a/38560183/6433023
  • 您可以使用storyboard管理标签栏项目的选中和未选中状态。记住!如果要将自定义图像设置为标签栏项目?并且您的图像必须包含后缀。这是系统要求的。

标签: ios swift storyboard tabbar uitabbaritem


【解决方案1】:

你可以这样使用

class TabBarViewController: UITabBarController {

    required init(coder aDecoder: NSCoder) {

    super.init(coder: aDecoder)!

override func viewDidLoad() {
    super.viewDidLoad()

    UITabBar.appearance().tintColor = UIColor(red: 254/255.0, green: 105/255.0, blue: 51/255.0, alpha: 100.0)

    for i in 0 ..< self.tabBar.items!.count {

        switch i {

        case 0:

            tabBar.items?[0].title = "Home"
            let firstTab = self.tabBar.items![i] as UITabBarItem
            learnTab.image = UIImage(named: "Homedeselected")!.imageWithRenderingMode(UIImageRenderingMode.AlwaysOriginal)
            firstTab.selectedImage = UIImage(named: "Homedeselected")!.imageWithRenderingMode(UIImageRenderingMode.AlwaysOriginal)
            firstTab.imageInsets = UIEdgeInsetsMake(-1, 0, 1, 0)
            firstTab.titlePositionAdjustment = UIOffsetMake(0, -4)


        case 1:

            tabBar.items?[1].title = "Request"
            let secondTab = self.tabBar.items![i] as UITabBarItem
            secondTab.image = UIImage(named: "RequestDeselected")!.imageWithRenderingMode(UIImageRenderingMode.AlwaysOriginal)
            secondTab.selectedImage = UIImage(named: "Requestselected")!.imageWithRenderingMode(UIImageRenderingMode.AlwaysOriginal)
            secondTab.imageInsets = UIEdgeInsetsMake(-1, 0, 1, 0)
            secondTab.titlePositionAdjustment = UIOffsetMake(0, -4)

        case 2:

            tabBar.items?[2].title = "Renew"
            let thirdTab = self.tabBar.items![i] as UITabBarItem
             thirdTab.image = UIImage(named: "RenewDeSelected")!.imageWithRenderingMode(UIImageRenderingMode.AlwaysOriginal)
            thirdTab.selectedImage = UIImage(named: "RenewSelected")!.imageWithRenderingMode(UIImageRenderingMode.AlwaysOriginal)
            thirdTab.imageInsets = UIEdgeInsetsMake(-1, 0, 1, 0)
            thirdTab.titlePositionAdjustment = UIOffsetMake(0, -4)

        case 3:

            tabBar.items?[3].title = "ReSell"
            let forthTab = self.tabBar.items![i] as UITabBarItem
            forthTab.image = UIImage(named: "ReSellDeSelected")!.imageWithRenderingMode(UIImageRenderingMode.AlwaysOriginal)
            forthTab.selectedImage = UIImage(named: "ReSellSelected")!.imageWithRenderingMode(UIImageRenderingMode.AlwaysOriginal)
            forthTab.imageInsets = UIEdgeInsetsMake(-1, 0, 1, 0)
            forthTab.titlePositionAdjustment = UIOffsetMake(0, -4)

        case 4:

            tabBar.items?[4].title = "ReCycle"
            let fifthTab = self.tabBar.items![i] as UITabBarItem
            fifthTab.image = UIImage(named: "ReCycleDeSelected")!.imageWithRenderingMode(UIImageRenderingMode.AlwaysOriginal)
            fifthTab.selectedImage = UIImage(named: "ReCycleSelected")!.imageWithRenderingMode(UIImageRenderingMode.AlwaysOriginal)
            fifthTab.imageInsets = UIEdgeInsetsMake(-2, 0, 2, 0)
            fifthTab.titlePositionAdjustment = UIOffsetMake(0, -5)

        default:
            break
        }
    }
}

override func tabBar(tabBar: UITabBar, didSelectItem item: UITabBarItem) {




    }

}

【讨论】:

  • 谢谢!但是对于使用“ImageInsets”,只要我触摸它,按钮的大小就会改变。你知道有什么办法可以解决这个问题吗?
  • 这不是按钮大小,而是图像大小!确保您正确导入了所有需要的 PNG 图像。因为iOS可以识别相同类型的图像名称:“example@2x.png”或“example@3x.png”。祝你好运
猜你喜欢
  • 1970-01-01
  • 2015-09-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-11-18
  • 2013-07-29
  • 2012-09-01
相关资源
最近更新 更多