我有这段代码
[tabBarItem1 setFinishedSelectedImage:[UIImage imageNamed:@"tab_pressed_home_icon"] withFinishedUnselectedImage:[UIImage imageNamed:@"tab_home_icon"]];
tabBarItem1.imageInsets = UIEdgeInsetsMake(8, 0, -2, 0);
在标签栏上设置了一个图标。
到目前为止,到目前为止一切都有罚款,我更新了Xcode 5.1并在ios7.1模拟器上运行应用程序。
这是应用
现在,当我点击标签栏时,图标图像尺寸减小,当我释放手指图像时恢复正常。 但是,如果我点击图标并拖动它,图像看起来像这样(缩小)。
像这样怎么会发生这种情况? 无论如何要解决这个问题?
感谢。
答案 0 :(得分:23)
通过像其他人提到的那样设置tabBarItem的imageInsets来解决此问题。您可以在代码中执行此操作,也可以在Interface Builder中执行此操作,但这并不重要。
重要的一点是让顶部插入BE EQUAL到底部插入。
答案 1 :(得分:11)
在尝试使用以下代码设置Image insets时,我在iOS 7.1上遇到了同样的问题:
[self.tabBarItem setImageInsets:UIEdgeInsetsMake(5, 0, -5, 0)];
所以我直接使用故事板上的Bar Item Size解决了这个问题。
请记住,要使其工作,您应该按以下方式分配TabBarItem的图像
UITabBar *tabBar = self.tabBarController.tabBar;
UITabBarItem *myItem = [tabBar.items objectAtIndex:0];
[homeItem setFinishedSelectedImage:[UIImage imageNamed:@"A.png"]
withFinishedUnselectedImage:[UIImage imageNamed:@"B.png"]];
而不是这种方式
[self.tabBarItem setFinishedSelectedImage:[UIImage imageNamed:@"A.png"]
withFinishedUnselectedImage:[UIImage imageNamed:@"B.png"]];
<强>更新强>
要访问条形图尺寸,请直接选择&#39;项目&#39;任何Tab Bar Controller的孩子的场景下的元素。 (图1)
答案 2 :(得分:7)
我的问题类似,tabbar图标在7.1更新中改变了它的位置,这个问题真的很烦人,我做了一个快速的解决方案,因为我必须批准该应用程序。是这样的:
好的我不确定这是最好的解决方案,但对我来说很有效。
答案 3 :(得分:2)
这里的问题相同。此外,在更新到iOS 7.1和xcode 5.1之后我的解决方案:标签栏项目大小设置为4(对于底部。)(在大小检查器中)我将其更改为0,就像所有其他人一样,问题就消失了。
答案 4 :(得分:2)
我放弃了,我的解决方案在这里:
使用该函数调整大小并使用UIImage
- (UIImage *)imageWithImage:(UIImage *)image scaledToSize:(CGSize)newSize andOffSet:(CGPoint)offSet{
UIGraphicsBeginImageContextWithOptions(newSize, NO, 0.0);
[image drawInRect:CGRectMake(offSet.x, offSet.y, newSize.width-offSet.x, newSize.height-offSet.y)];
UIImage *newImage = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();
return newImage;
}
并正确设置标签栏项目图像:
UITabBarItem *barItem = [self.tabBarController.tabBar.items objectAtIndex:i];
CGSize size = CGSizeMake(49, 49);
CGPoint offset = CGPointMake(10, 10);
[barItem setFinishedSelectedImage:[self imageWithImage:selectedImage scaledToSize:size andOffSet:offset]
withFinishedUnselectedImage:[self imageWithImage:unSelectedImage scaledToSize:size andOffSet:offset]];
如果有任何其他解决方案可以提供帮助!
答案 5 :(得分:1)
您可以在标签栏的顶部放置UIView,并将UITapGestureReognizer添加到UIView。点击时,我确定它的位置并为标签栏调用相应的选定项目。哈克,但工作得非常好,让你可以将你的插入值保存到你想要的任何地方。
@property UIView tabBarCover;//place on top of uitabbar and give it clear color background
- (void)viewDidLoad
{
[tabBar setSelectedItem:[tabBar.items objectAtIndex:0]];
UITapGestureRecognizer *singleFingerTap =
[[UITapGestureRecognizer alloc] initWithTarget:self
action:@selector(handleSingleTap:)];
[tabBarCover addGestureRecognizer:singleFingerTap];
}
然后每次点击UIView时,根据用户触摸的位置设置所选项目。我有3个标签栏项,所以我只为x坐标做了一些逻辑。
-(void) handleSingleTap:(UITapGestureRecognizer *) recognizer
{
CGPoint location = [recognizer locationInView:[recognizer.view superview]];
//NSLog(@"tapped it %lf", location.x);
if(location.x<=105){
//1st 3rd tapped, do something
}
else if(location.x >105 && location.x<=210)
{
//do nothing, selected item stays same. this is glas
}else{
//must be in 3rd section so do that load
}
}
希望它有所帮助。
答案 6 :(得分:1)
注意:imageInsets无济于事!因为这是图像规模的问题。我玩了2个小时!没有结果。尝试解决问题是愚蠢的方法!
请查看此项目http://www.raywenderlich.com/50310/storyboards-tutorial-in-ios-7-part-2
在这个项目上玩家和手势图标完美无缺!因为有视网膜和非视网膜的图标。
如果你有两个尺度的图标,那么没问题。使用它们!一切都会好起来的!这是1变种!
2变的。如果您只有一个大图像,并且您想要同时使用这两个显示,那么您需要指定&#34; scale&#34;已调整大小的图片:
(UIImage *)thumbnailImageSize:(CGSize)size fromImage:(UIImage *)image {
if ([[UIScreen mainScreen] respondsToSelector:@selector(scale)] == YES && [[UIScreen mainScreen] scale] == 3.00) {
_scale = 3.00;
} else if ([[UIScreen mainScreen] respondsToSelector:@selector(scale)] == YES && [[UIScreen mainScreen] scale] == 2.00) {
_scale = 2.00;
} else
_scale = 1.00;
UIGraphicsBeginImageContextWithOptions(size, NO, _scale);
[image drawInRect:CGRectMake(0, 0, size.width, size.height)];
UIImage *newImage = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();
return newImage;
}
答案 7 :(得分:1)
我的回答基于此处发布的其他人 - 在标签栏项目中设置为0所有ImageInsets:
for (UITabBarItem* item in self.tabBar.items)
{
[item setImageInsets: UIEdgeInsetsMake(0, 0, 0, 0)];
}
答案 8 :(得分:0)
试试这个应该做的伎俩并且不会影响旧版本
将以下行放在任何控制器初始化方法中:
UIImage* image = [UIImage imageNamed: @"Your tabbar image name goes here"];
if ([image respondsToSelector: @selector(imageWithRenderingMode:)])
[self.tabBarItem setImage: [image imageWithRenderingMode: UIImageRenderingModeAlwaysOriginal]];
答案 9 :(得分:0)
在您的代码中设置了顶部和底部插图 - 它应该足以设置这些(例如,顶部)。突出显示的图像被压缩的原因可能是栅格具有不同的尺寸,与默认图像不同 - 在这种情况下,插图会使图像垂直缩放。
答案 10 :(得分:0)
我通过将此类别用于从UIView创建图像的UIImage来修复了同样的问题
+ (UIImage *) imageWithView:(UIView *)view
{
UIGraphicsBeginImageContextWithOptions(view.bounds.size, view.opaque, 0.0);
[view.layer renderInContext:UIGraphicsGetCurrentContext()];
UIImage * img = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();
return img;
}
然后,使用此方法,您可以使用所需的自定义偏移创建新图像。 (我只需要Y偏移)。
-(UIImage *) uiNewImageForTabBar: (UIImage *) i withOffsetForY: (CGFloat) offsetY
{
UIView *v = [[UIView alloc] initWithFrame:CGRectMake(0, 0, i.size.width, i.size.height+offsetY)];
[v setBackgroundColor:[UIColor clearColor]];
[v setOpaque:NO];
UIImageView *sub = [[UIImageView alloc] initWithImage:i];
[sub setY:offsetY];
[v addSubview:sub];
return [UIImage imageWithView:v];
}
答案 11 :(得分:0)
我的解决方案是将x和y点除以2,然后分别将其设置为左,右,上和下。