1

在我的应用程序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,只留下一小部分标签“可触摸”。(下图,边框周围有边框)

框架小于标签图像

为了尝试解决这个问题,在我的 subcalssed 中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不允许您更改这些框架还是我在这里做错了什么?

有任何帮助!谢谢!

编辑:

最后,我只是把我的标签图像缩小了。我发现 70px 的高度仍然可以吸引大多数人的注意。

4

2 回答 2

4

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

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

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

于 2012-12-18T15:31:35.603 回答
0

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

在此处输入图像描述

于 2015-05-10T12:32:32.950 回答