Objective c 如何更改Uitabritem的宽度?

Objective c 如何更改Uitabritem的宽度?,objective-c,xcode,width,uitabbaritem,Objective C,Xcode,Width,Uitabbaritem,如何更改Uitabritem的宽度 我有一个标题为的项目,比默认项目宽度宽。如何修复它?我只是在文档中搜索,没有找到调整UITableItem宽度的方法 一种可能的解决方案是在选项卡栏控制器中放置一个视图以加载自定义UITabBarItem,即正确的宽度。您可以通过将UITabBar子类化并覆盖其layoutSubviews方法来更改选项卡栏项的间距(和宽度)。您将在self.subview数组中找到所有选项卡栏按钮。它们的类是非公共UITabBarButton,但它们继承自UIControl,

如何更改Uitabritem的宽度


我有一个标题为的项目,比默认项目宽度宽。如何修复它?

我只是在文档中搜索,没有找到调整UITableItem宽度的方法


一种可能的解决方案是在选项卡栏控制器中放置一个视图以加载自定义UITabBarItem,即正确的宽度。

您可以通过将UITabBar子类化并覆盖其layoutSubviews方法来更改选项卡栏项的间距(和宽度)。您将在self.subview数组中找到所有选项卡栏按钮。它们的类是非公共UITabBarButton,但它们继承自UIControl,因此您可以识别所有选项卡栏按钮,检查它们是否属于UIControl类。然后,您只需更改选项卡栏按钮的框架。

iOS7及更高版本的解决方案:

uitabar引入了一个新属性:itemWidth

将itemWidth设置为正值,用作选项卡的宽度 将项目定位为居中组时的条形图(与 填充选项卡栏)。将使用默认值0或小于0的值 解释为系统定义的宽度

因此,您可以在AppDelegate中执行此操作:

[[UITabBar appearance] setItemWidth:WIDTH];
如果要填充整个UITabBar:

[[UITabBar appearance] setItemWidth:self.window.frame.size.width/NUMBER_OF_ITEMS];

如果您将UITabBarController子类化,则可以为swift找到更简单的解决方案 这将自动均匀地填充选项卡栏项

self.tabBar.itemPositioning = .fill

Swift 5

UITabBar().itemWidth = self.window!.frame.size.width/5

我知道我在回答中说过,但是通过在选项卡栏中放置一个具有自定义宽度的视图(视图中的视图,而不是链接到视图的选项卡栏),您应该能够实现您的目标。如果我的原始答案模棱两可,我深表歉意。如果我在选项卡栏上放置了一个视图,我如何添加选项卡栏项目。阅读我的答案,iOS7提供了一个解决方案。感谢您的精彩解释,包括屏幕快照。这真的很有效:)太棒了。我花了8个小时来获得解决方案,这解决了我的问题。不幸的是,此解决方案不允许为特定项目定制宽度,只允许所有项目。您将如何将自定义
UITabBar
子类分配给
UITabBarController
?您对其进行了测试吗?我认为它不适合调整物品的宽度。@Ashutoshshhukla是的,经过测试。它不适合我。我认为您需要对TabBar进行子类化。
UITabBar().itemWidth = self.window!.frame.size.width/5