iOS在UITabBar中更改UITabBarButton的框架

Posted

技术标签:

【中文标题】iOS在UITabBar中更改UITabBarButton的框架【英文标题】:iOS Change frame of UITabBarButton in UITabBar 【发布时间】:2012-12-18 15:18:30 【问题描述】:

在我的应用程序中,我有一个UITabBarController,我在AppDelegate 中提供自定义选择/未选择图像,如下所示:

UIImage *selectedImage = [UIImage imageNamed:@"home-tab-selected"];
UIImage *unselectedImage = [UIImage imageNamed:@"home-tab"];
UITabBar *tabBar = tabController.tabBar;
UITabBarItem *item1 = [tabBar.items objectAtIndex:0];
[item1 setFinishedSelectedImage:selectedImage withFinishedUnselectedImage:unselectedImage];

我拥有的图像是 100x100,比普通的标签栏项目大得多。一切都很好,我的图像放置得很好,看起来很棒。

我遇到的问题是底层 UITabBarButton 的框架仍然是 76x48,只留下一小部分标签“可触摸”。 (下图带有边框)

为了尝试解决这个问题,在我的子类UITabBarController viewDidLoad 中,我遍历每个UITabBarButton,并将框架设置如下:

for (UIView* subView in self.tabBar.subviews)

    if ([subView isKindOfClass:NSClassFromString(@"UITabBarButton")])
    

        [subView setFrame:CGRectMake(subView.frame.origin.x, subView.frame.origin.y, 100, 100)];


    

在我这样做之后,我记录了框架并且它们确实发生了变化——但框架在我的标签栏中永远不会改变——我仍然只能看到并且可以触摸较小的红色框。

这是因为 Apple 不允许您更改这些框架,还是我在这里做错了什么?

有任何帮助!谢谢!

编辑:

最后我只是把我的标签图像缩小了。我发现 70 像素的高度仍然能吸引大多数人的触摸。

【问题讨论】:

【参考方案1】:

加载后UITabBarController 的视图布局可能会发生变化:可以添加额外的UITabBarItems,用户可以切换到横向。

ios 6 之前,没有办法配置复杂的布局。由于UITabBar 是一个非常古老的类,它很可能在layoutSubviews 方法中工作。

您可以继承 UITabBar 并覆盖上述方法,但如果您走得那么远,您可能需要考虑创建自己的标签栏,最终它只是一个 UIView 和几个 UIButtons .

【讨论】:

我明白了——感谢您提供的信息。我想我将不得不创建自己的 UITabBar(但谁真的想这样做!)。我会先弄乱 layoutSubviews,看看我是否能在这条路上找到更快的解决方案。 @RyanG 您可能想看看以下UITabBar 替代方案:github.com/davidmorford/TabBarKit 谢谢,我一直在研究一些已经构建的自定义选项卡控件(现在正在实现这个:github.com/futuresimple/FSVerticalTabBarController)但是我要么继续使用我找到的一些自定义选项卡控件,要么简单地调整我的图像大小,这样它们就不会那么大了……因为我想尽可能地继续使用本机控件。感谢您的帮助!【参考方案2】:

底层的 UITabBarButtons 也有类似的问题。我通过将 UITabBar 的“项目定位”属性设置为“填充”来解决它。

【讨论】:

以上是关于iOS在UITabBar中更改UITabBarButton的框架的主要内容,如果未能解决你的问题,请参考以下文章

UITabBar 在 iOS7 上更改一个 UITabBarItem 的背景颜色

iOS创建UITabBar谁的项目可以用户动态更改

更改 UITabBar 上的图像

iOS 13:调整 UITabBar 高度不起作用 [重复]

更改 UITabBar 高度

UITabBar 项目位置问题 Xamarin