如何改变UITabBarItem的宽度?

Posted

技术标签:

【中文标题】如何改变UITabBarItem的宽度?【英文标题】:How to change the width of UITabBarItem? 【发布时间】:2011-07-31 08:37:20 【问题描述】:

我有一个带有标题的项目,它比默认项目宽度宽。我该如何解决?

【问题讨论】:

【参考方案1】:

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

为 UITabBar 引入了一个新属性:itemWidth

将 itemWidth 设置为正值以用作选项卡的宽度 当它们被定位为居中组时的条形项目(而不是 填充标签栏)。默认值为 0 或小于 0 的值将 解释为系统定义的宽度。

@property(nonatomic) CGFloat itemWidth NS_AVAILABLE_IOS(7_0) UI_APPEARANCE_SELECTOR;

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

[[UITabBar appearance] setItemWidth:WIDTH];

如果要填满整个UITabBar:

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

【讨论】:

感谢您的精彩解释,包括截图 它真的很管用 :) 太棒了。我花了 8 个小时才得到解决方案,这解决了我的问题。 不幸的是,此解决方案不允许自定义特定项目的宽度,仅适用于所有项目。【参考方案2】:

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

【讨论】:

您将如何将自定义UITabBar 子类分配给UITabBarController【参考方案3】:

我刚刚搜索了文档,并没有看到调整 UITabBarItem 宽度的方法。

一种可能的解决方案是在标签栏控制器中放置一个视图来加载自定义的 UITabBarItem,这是适当的宽度。

【讨论】:

我知道我在回答中说过,但是通过在标签栏内放置一个具有自定义宽度的视图(视图中的视图,而不是链接到视图的标签栏),您应该能够实现你的目标。如果我的原始答案模棱两可,我深表歉意 如果我在标签栏上放置一个视图,如何添加标签栏项目。 阅读我的回答,iOS7 有解决方案【参考方案4】:

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

self.tabBar.itemPositioning = .fill

【讨论】:

【参考方案5】:

斯威夫特 5

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

【讨论】:

你测试了吗?我认为调整项目的宽度不起作用。 @AshutoshShukla 是的,经过测试。 它对我不起作用。我相信你需要继承 TabBar。

以上是关于如何改变UITabBarItem的宽度?的主要内容,如果未能解决你的问题,请参考以下文章

UITabBarItem 更改图像高度和宽度

更改默认“未选择”UITabBarItem 图像颜色

获取 UITabBarItem 图像的默认未选择 TintColor

使用 UITabbaritem 作为 UIButton

UITabBarItem 选定的选项卡背景:自定义?

如何将 UITabBarItem 标题更改为另一个 UITabBarItem 的标题?