【问题标题】:Only image as UITabBarItem仅作为 UITabBarItem 的图像
【发布时间】:2012-08-04 20:35:40
【问题描述】:

我只想有一个图标作为 UITabBarItem 而不是下面的文本,我想知道这是否可能,如果可以,如何? TIA

【问题讨论】:

    标签: iphone objective-c uitabbar


    【解决方案1】:

    如果你使用故事板,也许你可以使用 bar item 大小检查器中的Image Inset 并同时将标题设置为空:

    【讨论】:

    • 这样做会拉伸标签栏内的图像。
    【解决方案2】:

    删除标题

    检查器的简单方法

    • 选择您的 TabbarItem
    • 标题位置更改为自定义偏移量
    • 将垂直设置为 100
    • 完成

    修复图像

    调整图片

    • 选择您的 TabbarItem
    • 定义您的顶部底部

    【讨论】:

    • 这个东西就像一个魅力。仅调整图像插图会拉伸标签栏内的图像。
    【解决方案3】:

    如果你只是设置图像并将 nil 传递给标题,图像将显示在 UITabBar 项的顶层。您还必须设置位置。

    int offset = 7;
    UIEdgeInsets imageInset = UIEdgeInsetsMake(offset, 0, -offset, 0);
    

    为 TabBarItem 设置图标图像后,设置属性值以更改图像位置,这样做:

    uiViewController.tabBarItem.imageInsets = imageInset;
    

    【讨论】:

      【解决方案4】:

      将项目的标题设置为 nil 通常是不够的,因为如果您设置视图控制器的标题,它也会设置标签栏项目的标题。

      相反,这样做:

      tabbarItem.titlePositionAdjustment = UIOffsetMake(0.f, 50.f);
      

      【讨论】:

        【解决方案5】:

        您可以使用这个 Swift 扩展来定义一个新方法 tabBarItemShowingOnlyImage(),它将返回任何修改为仅显示图像的 UITabBarItem

        // helper for creating an image-only UITabBarItem
        extension UITabBarItem {
            func tabBarItemShowingOnlyImage() -> UITabBarItem {
                // offset to center
                self.imageInsets = UIEdgeInsets(top:6,left:0,bottom:-6,right:0)
                // displace to hide
                self.setTitlePositionAdjustment(UIOffset(horizontal:0,vertical:30000))
                return self
            }
        }
        

        此扩展基于其他 cmets 提供的建议构建。

        它通过替换标题来隐藏标题,而不是将其设置为nil,因为有时其他对象(如视图控制器本身)会在标签栏项初始化后将标题设置为某个值。它通过使用imageInsets 将图像居中以将其偏移6pt,这是我在运行iOS8.3 的iPhone 6 上观察它所得到的值。

        我认为其他设备和布局配置可能需要不同的偏移校正,因此通用解决方案可能必须更复杂。

        【讨论】:

        • 完美解决方案。谢谢!
        • UITabbar 在 xCode 9、swift 4 中没有成员 setTitlePositionAdjustment。
        • self.titlePositionAdjustment = UIOffset(水平:0,垂直:300 * 20)
        【解决方案6】:

        我知道已经有一段时间了。但我可能有这个问题的解决方案。

        @ThiagoPires 答案仅在图像大到足以覆盖标题时才有用。如果不是,则标题将显示在图像下方。

        我认为最简单的方法是在视图控制器代码中将 tabBarItem 的标题设置为 ""。

        重要的是要知道每次更改视图控制器标题时,tabbaritem 的标题也会更新。您可以使用 KVO 来观察标题的变化,并相应地将 "" 设置为 tabbaritem 标题。但是,如果您不在代码中的很多地方更改它,您可以在更改 ViewController 标题的地方直接设置它。

        这里是 swift 中的一个例子:

        override func viewDidLoad() {
        
            super.viewDidLoad()
        
            self.title = "View controller's Title"
        
            self.tabBarItem.title = ""
        }
        

        就是这样。我希望这会有所帮助。

        【讨论】:

          【解决方案7】:

          相关文档(突出显示我的):

          initWithTitle:image:tag: 使用指定的属性创建并返回一个新项目。

          - (id)initWithTitle:(NSString *)title image:(UIImage *)image tag:(NSInteger)tag
          

          参数

          title:项目的标题。 如果为 nil,则不显示标题。

          image:项目的图像。如果为零,则不显示图像。 标签栏上显示的图像来自此图像。如果此图像太大而无法放在选项卡栏上,则会对其进行裁剪以适应。标签栏图像的大小通常为 30 x 30 点。源图像中的 alpha 值用于创建未选中和选中的图像——不透明的值将被忽略。

          tag:接收者的标签,一个整数,你可以用它来标识你的应用程序中的bar item对象。

          返回值:具有指定属性的新初始化项。

          【讨论】:

            【解决方案8】:

            试试下面的代码:

            UIViewController *viewController1=[[RootViewController alloc]initWithNibName:@"RootViewController" bundle:nil];
            UIViewController *viewController2=[[SecondViewCtr alloc]initWithNibName:@"SecondViewCtr" bundle:nil];
            UIViewController *viewController3=[[ThirdViewCtr alloc]initWithNibName:@"ThirdViewCtr" bundle:nil];
            UIViewController *viewController4=[[FourthVIewCtr alloc]initWithNibName:@"FourthVIewCtr" bundle:nil];
            UIViewController *viewController5=[[FIfthViewCtr alloc]initWithNibName:@"FIfthViewCtr" bundle:nil];
            
            
            UINavigationController *nav1 = [[UINavigationController alloc] initWithRootViewController:viewController1];
            UINavigationController *nav2 = [[UINavigationController alloc] initWithRootViewController:viewController2];
            UINavigationController *nav3 = [[UINavigationController alloc] initWithRootViewController:viewController3];
            UINavigationController *nav4 = [[UINavigationController alloc] initWithRootViewController:viewController4];
            UINavigationController *nav5 = [[UINavigationController alloc] initWithRootViewController:viewController5];
            peekArray = [[NSMutableArray alloc] init];
            
            self.tabBarController = [[UITabBarController alloc] init];
            self.tabBarController.viewControllers = [NSArray arrayWithObjects:nav1, nav2,nav3,nav4,nav5, nil];
            
            UITabBar *tabBar = _tabBarController.tabBar;
            UITabBarItem *tabBarItem1 = [tabBar.items objectAtIndex:0];
            UITabBarItem *tabBarItem2 = [tabBar.items objectAtIndex:1];
            UITabBarItem *tabBarItem3 = [tabBar.items objectAtIndex:2];
            UITabBarItem *tabBarItem4 = [tabBar.items objectAtIndex:3];
            UITabBarItem *tabBarItem5 = [tabBar.items objectAtIndex:4];
            
            [tabBarItem1 setFinishedSelectedImage:[UIImage imageNamed:@"home123.png"] withFinishedUnselectedImage:[UIImage imageNamed:@"home_112.png"]];
            [tabBarItem2 setFinishedSelectedImage:[UIImage imageNamed:@"gift123.png"] withFinishedUnselectedImage:[UIImage imageNamed:@"gift_112.png"]];
            [tabBarItem3 setFinishedSelectedImage:[UIImage imageNamed:@"cam12.png"] withFinishedUnselectedImage:[UIImage imageNamed:@"cam_112.png"]];
            [tabBarItem4 setFinishedSelectedImage:[UIImage imageNamed:@"message12.png"] withFinishedUnselectedImage:[UIImage imageNamed:@"message_112.png"]];
            [tabBarItem5 setFinishedSelectedImage:[UIImage imageNamed:@"people12.png"] withFinishedUnselectedImage:[UIImage imageNamed:@"people_112.png"]];
            
            [self.tabBarController setSelectedIndex:0];
            self.window.rootViewController = self.tabBarController;
            

            【讨论】:

              【解决方案9】:

              喜欢这个

              UITabBarItem * personalBarItem = [[UITabBarItem alloc] init];
              [personalBarItem setFinishedSelectedImage:[UIImage imageNamed:@"personal_click"] withFinishedUnselectedImage:[UIImage imageNamed:@"personal"]];
              

              【讨论】:

                猜你喜欢
                • 2012-01-26
                • 2013-09-10
                • 1970-01-01
                • 2014-03-03
                • 1970-01-01
                • 1970-01-01
                • 1970-01-01
                • 1970-01-01
                • 2017-08-15
                相关资源
                最近更新 更多