UITabBar 上的图像被压扁

Posted

技术标签:

【中文标题】UITabBar 上的图像被压扁【英文标题】:Image on UITabBar gets squished 【发布时间】:2014-04-04 23:42:02 【问题描述】:

嘿,我正在使用带有超大图像的自定义大小的 UITabBar。

我像这样将图像添加到标签栏项目:

UITabBar *tabBar = self.tabBar;
    UITabBarItem *tabBarItem1 = [tabBar.items objectAtIndex:0];
    [tabBarItem1 setImage:[UIImage imageNamed:@"image"]];
    [tabBarItem1 setImageInsets:UIEdgeInsetsMake(0, 0, 20, 0)];

另外,因为图像更大,我希望它们更多地悬停在标签栏的中间,所以我添加了插图。

我的问题是当我对插图进行编程然后单击按钮时,按钮会自行挤压。它保持它的宽度,但它的高度压在它自己身上。我当然不希望发生这种情况,但我似乎无法找出发生了什么。

谢谢,Krtko

-模组注意事项请锁定此帖

- 回答我问题的人的注意事项。感谢您的帮助,但当时这是一个已知的错误,所以请停止回答这个问题。谢谢

【问题讨论】:

【参考方案1】:

你只在 ios 7 上看到这个吗?

7.1 似乎引入了标签栏图像插入的错误。如果您不断点击或按住选项卡,它会根据插图增大或缩小。如果您点击另一个标签,标签栏图像会恢复正常吗?

【讨论】:

是的,很糟糕,谢谢你让我知道。所以我已经开始并在每个图标的底部添加了一大块 alpha。你觉得你能帮我做点别的吗?现在我只能点击大约 75% 的按钮。顶部不会触发,并且会触发它下面的任何子视图。我确实调整了标签栏框架的大小,但这并没有解决任何问题。谢谢:) @Krtko 不要使用 cmets 提出第二个问题。相反,提出一个新问题! 到目前为止,我所知道的唯一确定的解决方法是根本不使用插图。我的一个朋友最终走上了这条路。我正在等待他们是否解决此问题,因为它不会破坏任何功能。另外,我和你一样,我的图片更大,而且我没有使用标题。 伙计,我在这个问题上花了很长时间,发誓是我。你不知道你救了我多少,哈哈。如果可以,请投票一百万次。 仅供参考,我检查并插入标题确实有效【参考方案2】:

当使用 UIEdgeInsetsMake 时,重要的一点是让顶部插入“BE EQUAL”到底部插入。 例如:item.imageInsets = UIEdgeInsetsMake(6, 0, -6, 0);

【讨论】:

这个答案修复了上/下和右/左的错误。缺点是您无法调整图像大小,只能移动它。【参考方案3】:

删除图片的插图。使用与您想要的尺寸完全一致的图像。在 Apple 解决此问题之前,我们必须遵循这种方法。

【讨论】:

【参考方案4】:

您可以在标签栏顶部放置一个 UIView,并在 UIView 中添加一个 UITapGestureReognizer。点击时,我确定它在哪里,并为标签栏调用适当的选定项目。 Hack,但效果很好,可以让您将插入值保持为您想要的任何值。

 @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

    


希望对你有帮助。

【讨论】:

【参考方案5】:

你只需检查 ios7 是否在里面再次 setFrame

(void)tabBarController:(UITabBarController *)tabBarController didSelectViewController:(UIViewController *)viewController

【讨论】:

以上是关于UITabBar 上的图像被压扁的主要内容,如果未能解决你的问题,请参考以下文章

UIView 背景图像被压扁

当 wmode = 网站上的透明或不透明时,Flash swf 有时会被压扁

UITabbar 背景图像重复出现

具有垂直对齐图像的自定义 UITabBar

UITabBar 背景图像未正确显示

UITabBar 色调颜色不适用于图像