如何在swift中的标签栏项目中设置图像?

问题描述:

我已将一个视图控制器&嵌入到导航控制器中,并再次嵌入到标签栏控制器中。当我试图通过设置故事板图像,图像不会出现在标签栏icon.here映像名称是25如何在swift中的标签栏项目中设置图像?

enter image description here

enter image description here

请建议我,我该怎么办?我怎样才能以编程方式执行它?我应该为此采取适当的图像大小?提前致谢。

+0

不,不需要编程..也可以通过上述方法完成。 –

+0

但为什么这不适用于我的项目? – KhanShaheb

+0

你能显示输出截图吗? –

设置两个图像 - 用于选择/选中状态

See This

+0

使用透明图像我不喜欢你,但同样的问题。这是我的电脑的错误或问题,我无法理解。他们的图像,图像大小的任何命名约定? – KhanShaheb

+0

当我使用iconbeast或icons8中的图标时,它们会很好地显示,但是当我使用我的图像时,它们不受支持。任何想法? – KhanShaheb

+0

[见这(https://github.com/mho000/MHImageTabBar),并检查什么是你的代码 – iDeveloper

添加AppDelegate类:

func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool 
{ 
    window=UIWindow(frame: UIScreen.main.bounds) 
    self.window?.rootViewController = setTabbar() 
    self.window?.makeKeyAndVisible() 
    window?.backgroundColor=UIColor.white 
    return true 
} 

func setTabbar() -> UITabBarController 
{ 
    let storyboard = UIStoryboard(name: "Main", bundle: nil) 
    let tabbarcntrl = UITabBarController() 

    let Home = storyboard.instantiateViewController(withIdentifier: "HomeView") // 1st tab bar viewcontroller 
    let Followed = storyboard.instantiateViewController(withIdentifier: "FollowedView") // 2nd tab bar viewcontroller 
    let Message = storyboard.instantiateViewController(withIdentifier: "MessageView") // 3rd tab bar viewcontroller 

    // all viewcontroller embedded navigationbar 
    let nvHome = UINavigationController(rootViewController: Home) 
    let nvFollowed = UINavigationController(rootViewController: Followed) 
    let nvMessage = UINavigationController(rootViewController: Message) 

    // all viewcontroller navigationbar hidden 
    nvHome.setNavigationBarHidden(true, animated: false) 
    nvFollowed.setNavigationBarHidden(true, animated: false) 
    nvMessage.setNavigationBarHidden(true, animated: false) 

    tabbarcntrl.viewControllers = [nvHome,nvFollowed,nvMessage] 

    let tabbar = tabbarcntrl.tabBar 
    tabbar.barTintColor = UIColor.black 
    tabbar.backgroundColor = UIColor.black 
    tabbar.tintColor = UIColor(red: 43/255, green: 180/255, blue: 0/255, alpha: 1) 

    //UITabBar.appearance().tintColor = UIColor.white 
    let attributes = [NSFontAttributeName:UIFont(name: "Montserrat-Light", size: 10)!,NSForegroundColorAttributeName:UIColor.white] 
    let attributes1 = [NSFontAttributeName:UIFont(name: "Montserrat-Light", size: 10)!,NSForegroundColorAttributeName:UIColor(red: 43/255, green: 180/255, blue: 0/255, alpha: 1)] 

    UITabBarItem.appearance().setTitleTextAttributes(attributes, for: .normal) 
    UITabBarItem.appearance().setTitleTextAttributes(attributes1, for: .selected) 


    let tabHome = tabbar.items![0] 
    tabHome.title = "Home" // tabbar titlee 
    tabHome.image=UIImage(named: "icon_home.png")?.withRenderingMode(.alwaysOriginal) // deselect image 
    tabHome.selectedImage = UIImage(named: "icon_home.png")?.withRenderingMode(.alwaysOriginal) // select image 
    tabHome.titlePositionAdjustment.vertical = tabHome.titlePositionAdjustment.vertical-4 // title position change 

    let tabFoll = tabbar.items![1] 
    tabFoll.title = "Followed" 
    tabFoll.image=UIImage(named: "icon_fold.png")?.withRenderingMode(.alwaysOriginal) 
    tabFoll.selectedImage=UIImage(named: "icon_fold.png")?.withRenderingMode(.alwaysOriginal) 
    tabFoll.titlePositionAdjustment.vertical = tabFoll.titlePositionAdjustment.vertical-4 

    let tabMsg = tabbar.items![3] 
    tabMsg.title = "Message" 
    tabMsg.image=UIImage(named: "icon_mail.png")?.withRenderingMode(.alwaysOriginal) 
    tabMsg.selectedImage=UIImage(named: "icon_mail.png")?.withRenderingMode(.alwaysOriginal) 
    tabMsg.titlePositionAdjustment.vertical = tabMsg.titlePositionAdjustment.vertical-4 

    return tabbarcntrl 
} 
+0

错误,我会把你的FUNC setTabbar() - >的UITabBarController {}功能??? – KhanShaheb

+0

在AppDelegate类 –

+0

感谢您的回答:) – KhanShaheb

你正在做的一切正道的东西,但唯一的问题是你的tabbaritem图像的大小不正确。只需查看此表以查看tabbaritem图像的实际大小。

enter image description here

+0

当我从图像图标下载图像,其属性显示30x30 – KhanShaheb

+0

您需要创建1x,2x,3x Tabbar icon.So适当的资产为您的图像是:30x30 - 1x, 60x60 - 2x,90x90 - 3x –

+0

(约75 x 75)是什么意思? – KhanShaheb

在你MainTabbarViewController

绑定您的TabBar的出口:

@IBOutlet weak var myTabBar: UITabBar? 

override func viewDidLoad() { 
     super.viewDidLoad() 

     myTabBar?.tintColor = UIColor.white 
     tabBarItem.title = "" 

     setTabBarItems() 

} 

设置的TabBar以下项目在这里定义的方法:

func setTabBarItems(){ 

     let myTabBarItem1 = (self.tabBar.items?[0])! as UITabBarItem 
     myTabBarItem1.image = UIImage(named: "Unselected")?.withRenderingMode(UIImageRenderingMode.alwaysOriginal) 
     myTabBarItem1.selectedImage = UIImage(named: "Selected ")?.withRenderingMode(UIImageRenderingMode.alwaysOriginal) 
     myTabBarItem1.title = "" 
     myTabBarItem1.imageInsets = UIEdgeInsets(top: 6, left: 0, bottom: -6, right: 0) 

     let myTabBarItem2 = (self.tabBar.items?[1])! as UITabBarItem 
     myTabBarItem2.image = UIImage(named: "Unselected")?.withRenderingMode(UIImageRenderingMode.alwaysOriginal) 
     myTabBarItem2.selectedImage = UIImage(named: "Selected")?.withRenderingMode(UIImageRenderingMode.alwaysOriginal) 
     myTabBarItem2.title = "" 
     myTabBarItem2.imageInsets = UIEdgeInsets(top: 6, left: 0, bottom: -6, right: 0) 


     let myTabBarItem3 = (self.tabBar.items?[2])! as UITabBarItem 
     myTabBarItem3.image = UIImage(named: "Unselected")?.withRenderingMode(UIImageRenderingMode.alwaysOriginal) 
     myTabBarItem3.selectedImage = UIImage(named: "Selected")?.withRenderingMode(UIImageRenderingMode.alwaysOriginal) 
     myTabBarItem3.title = "" 
     myTabBarItem3.imageInsets = UIEdgeInsets(top: 6, left: 0, bottom: -6, right: 0) 

     let myTabBarItem4 = (self.tabBar.items?[3])! as UITabBarItem 
     myTabBarItem4.image = UIImage(named: "Unselected")?.withRenderingMode(UIImageRenderingMode.alwaysOriginal) 
     myTabBarItem4.selectedImage = UIImage(named: "Selected")?.withRenderingMode(UIImageRenderingMode.alwaysOriginal) 
     myTabBarItem4.title = "" 
     myTabBarItem4.imageInsets = UIEdgeInsets(top: 6, left: 0, bottom: -6, right: 0) 

} 

CHEERS!