如何获得UITabBarItem的宽度?

Mos*_*she 16 iphone uitabbaritem uitabbar ios

UITabBarItem的宽度会有所不同,具体取决于有多少.

如何确定标签栏项目的宽度?

如果可能的话,我正在寻找一个属性,而不是数学公式,因为在iPad上,标签栏的两侧也存在填充问题.考虑这些截图.注意iPad上标签栏项目两侧的填充(用红色框突出显示).iPhone上不存在此填充.

iPad:

在此输入图像描述

iPhone: 在此输入图像描述

Cam*_*ert 7

编辑:在下面的评论中已经注意到此解决方案在iOS 5的测试版中不起作用,因此请准备好修改它以满足您的需求.

我认为为了以正确的方式做到这一点,你必须能够到达每个标签栏项目的框架.幸运的是,这是可能的:

CGFloat tabBarTop = [[[self tabBarController] tabBar] frame].origin.y;
NSInteger index = [[self tabBarController] selectedIndex];
CGFloat tabMiddle = CGRectGetMidX([[[[[self tabBarController] tabBar] subviews] objectAtIndex:index] frame]);
Run Code Online (Sandbox Code Playgroud)

上面的代码为您提供了选项卡栏顶部的y坐标和所选选项卡项中间的x坐标.从这里,您可以将指标视图添加到相对于此点的选项卡栏控制器视图中.

免责声明:这种方法的危险在于它UITabBar通过访问其视图层次结构和frame私有UITabBarButton类实例的属性来窥视类的底层.未来的iOS更新可能会(但不太可能)影响/破坏此方法.但是,您没有访问任何私有API,因此不应该从App Store中拒绝您的应用程序.

我制作了一个简单的iPad项目,展示了它的工作原理,并完成了动画制作.