是否可以在UITabbar中更改UITabbarItem的宽度和iPad应用程序的每个UITabbarItem之间的边距?
问题是标准边距对于我的布局来说太大了 - 客户希望标签更紧凑:/
或者我应该使用UIToolbar来实现这个目标?
答案 0 :(得分:2)
对于Tabbar项目宽度:
[[UITabBar appearance] setItemWidth:self.window.frame.size.width/NUMBER_OF_ITEMS];
对于tabbar框架:
[self.tabBar setFrame:rectFrame];
答案 1 :(得分:1)
我用这种方式解决了同样的问题: 我的目标是通过使用设计师为我发送的图像来自定义标签栏。
我附加了项目的.png文件,初始化了UIImage *类型的对应变量,并使用了UITabBarItem函数setFinishedSelectedImage:withFinishedUnselectedImage:来设置UITabbarItem的活动/非活动状态的图像:
UIImage * left_active, *left_inactive, *center_active, *center_inactive, *right_active, *right_inactive;
left_active = [UIImage imageNamed:@"left_active_img"];
...
[self.leftTabBarItem setFinishedSelectedImage:left_active withFinishedUnselectedImage:left_inactive];
[self.centerTabBarItem setFinishedSelectedImage:center_active withFinishedUnselectedImage:center_inactive];
[self.rightTabBarItem setFinishedSelectedImage:right_active withFinishedUnselectedImage:right_inactive];
但是定制的tabbarItems比设计师的图像更小,并且被分配在屏幕的中心位置:
2)为了解决这个问题,我添加了额外的UITABBARITEMS - 在初始的左边和右下角
3)创建了UITabBarItems的对应出口:
.H-文件:
@property (nonatomic, retain) IBOutlet UITabBar * tabBar;
// THE INTIAL items
@property (nonatomic, retain) IBOutlet UITabBarItem * leftTabBarItem;
@property (nonatomic, retain) IBOutlet UITabBarItem * centerTabBarItem;
@property (nonatomic, retain) IBOutlet UITabBarItem * rightTabBarItem;
// THE ADDITIONAL items
@property (nonatomic, retain) IBOutlet UITabBarItem * left_1;
@property (nonatomic, retain) IBOutlet UITabBarItem * left_2;
@property (nonatomic, retain) IBOutlet UITabBarItem * center_1;
@property (nonatomic, retain) IBOutlet UITabBarItem * center_2;
@property (nonatomic, retain) IBOutlet UITabBarItem * right_1;
@property (nonatomic, retain) IBOutlet UITabBarItem * right_2;
然后按照下面列出的顺序将Outlets附加到UITabBarItem:
并在委托类中更正UITabbarDelegate方法以仅切换甜菜可见项目 .M-文件:
#pragma mark - UITabbarDelegate
- (void)tabBar:(UITabBar *)tabBar didSelectItem:(UITabBarItem *)item{
if (item == self.leftTabBarItem)
{
NSLog(@"0"); // first visible item selected
} else if (item == self.centerTabBarItem)
{
NSLog(@"1"); // second visible item selected
} else if (item == self.rightTabBarItem)
{
NSLog(@"2"); // third visible item selected
} else if (item == self.left_1){
[self.tabBar setSelectedItem: self.leftTabBarItem];
} else if (item == self.left_2){
[self.tabBar setSelectedItem: self.leftTabBarItem];
} else if (item == self.center_1){
[self.tabBar setSelectedItem: self.centerTabBarItem];
}else if (item == self.center_2){
[self.tabBar setSelectedItem: self.centerTabBarItem];
}else if (item == self.right_1){
[self.tabBar setSelectedItem: self.rightTabBarItem];
} else if (item == self.right_2){
[self.tabBar setSelectedItem: self.rightTabBarItem];
}
}
现在一切看起来都很正常。
您可以使用相同的步骤通过添加其他项目和更正委托方法来自定义UITabBarItem之间的大小和间隔。
答案 2 :(得分:0)
我认为不可能。您可以创建自定义选项卡栏。另外,使用默认UItabbar可能会导致在应用程序批准过程中被拒绝。
答案 3 :(得分:0)
您可以通过继承UITabBar并覆盖其layoutSubviews方法来更改选项卡栏项的间距。您将在self.subViews数组中找到所有标签栏按钮。他们的类是非公共UITabBarButton,但它们继承自UIControl,因此您可以识别所有标签栏按钮,检查它们是否是UIControl类。然后您只需要更改标签栏按钮的框架。
答案 4 :(得分:0)
您可以使用setSelectionIndicatorImage使标签更紧凑。
iPad中的UITabBarItem宽度将与selectionIndicatorImage的宽度相匹配
AppDelegate.m中的
[[UITabBar appearance] setItemWidth:self.window.frame.size.width/NUMBER_OF_YOUR_TAB];
[[UITabBar appearance] setItemSpacing:0];
[[UITabBar appearance] setSelectionIndicatorImage:[self imageFromColor:[UIColor clearColor] forSize:CGSizeMake(self.window.frame.size.width/NUMBER_OF_YOUR_TAB, 10) withCornerRadius:0]];
您可以使用以下代码以编程方式创建图像
- (UIImage *)imageFromColor:(UIColor *)color forSize:(CGSize)size withCornerRadius:(CGFloat)radius
{
CGRect rect = CGRectMake(0, 0, size.width, size.height);
UIGraphicsBeginImageContext(rect.size);
CGContextRef context = UIGraphicsGetCurrentContext();
CGContextSetFillColorWithColor(context, [color CGColor]);
CGContextFillRect(context, rect);
UIImage *image = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();
UIGraphicsBeginImageContext(size);
[[UIBezierPath bezierPathWithRoundedRect:rect cornerRadius:radius] addClip];
// Draw your image
[image drawInRect:rect];
image = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();
return image;
}
答案 5 :(得分:0)
不需要子类化。
tabBarController.tabBar.itemPositioning = .centered
tabBarController.tabBar.itemWidth = 40
tabBarController.tabBar.itemSpacing = 38
答案 6 :(得分:-1)
您无法更改UITabBarItem
的宽度,即使在对UITabBarItem进行子类化后也无法执行此操作。 Apple对开发人员实现应用程序的方式有一定的限制。
你需要使用UIToolBar
,最好的选择是转到github
,因为很多示例应用程序在底部使用可滚动的UIToolBar而不是UITabBar
。