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
的视图布局可能会发生变化:可以添加额外的UITabBarItem
s,用户可以切换到横向。
在 ios 6 之前,没有办法配置复杂的布局。由于UITabBar
是一个非常古老的类,它很可能在layoutSubviews
方法中工作。
您可以继承 UITabBar
并覆盖上述方法,但如果您走得那么远,您可能需要考虑创建自己的标签栏,最终它只是一个 UIView
和几个 UIButton
s .
【讨论】:
我明白了——感谢您提供的信息。我想我将不得不创建自己的 UITabBar(但谁真的想这样做!)。我会先弄乱 layoutSubviews,看看我是否能在这条路上找到更快的解决方案。 @RyanG 您可能想看看以下UITabBar
替代方案:github.com/davidmorford/TabBarKit
谢谢,我一直在研究一些已经构建的自定义选项卡控件(现在正在实现这个:github.com/futuresimple/FSVerticalTabBarController)但是我要么继续使用我找到的一些自定义选项卡控件,要么简单地调整我的图像大小,这样它们就不会那么大了……因为我想尽可能地继续使用本机控件。感谢您的帮助!【参考方案2】:
底层的 UITabBarButtons 也有类似的问题。我通过将 UITabBar 的“项目定位”属性设置为“填充”来解决它。
【讨论】:
以上是关于iOS在UITabBar中更改UITabBarButton的框架的主要内容,如果未能解决你的问题,请参考以下文章
UITabBar 在 iOS7 上更改一个 UITabBarItem 的背景颜色