UITabBarItem的宽度会有所不同,具体取决于有多少个。
如何确定标签栏项目的宽度?
我正在寻找一个可能的属性,而不是数学公式,因为在iPad上,选项卡栏两侧的填充都存在问题。考虑这些屏幕截图。请注意iPad上选项卡栏项目两侧的填充物(用红色框突出显示)。 iPhone上不存在此填充。
iPad:
iPhone:
最佳答案
编辑:在下面的注释中已经注意到,该解决方案在iOS 5的beta版本中不起作用,因此请准备对其进行修改以满足您的需求。
我认为,为了正确执行此操作,您必须能够进入每个选项卡栏项目的框架。幸运的是,这是可能的:
CGFloat tabBarTop = [[[self tabBarController] tabBar] frame].origin.y;
NSInteger index = [[self tabBarController] selectedIndex];
CGFloat tabMiddle = CGRectGetMidX([[[[[self tabBarController] tabBar] subviews] objectAtIndex:index] frame]);
上面的代码为您提供选项卡栏顶部的y坐标和所选选项卡项目中间的x坐标。从此处,您可以将指标 View 相对于此点添加到选项卡栏 Controller 的 View 中。
免责声明:这种方法的危险在于,它通过访问其 View 层次结构和私有(private)
UITabBar
类实例的frame
属性来窥视UITabBarButton
类的内部。将来的iOS更新可能会影响(或破坏)此方法(但不太可能)。但是,您不会访问任何私有(private)API,因此不应导致您的应用程序被App Store拒绝。我制作了a simple iPad project demonstrating how it works,并带有动画。
关于iphone - 如何获得UITabBarItem的宽度?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/5540027/