3

在 iOs7 而非早期版本下,我有一条线穿过我的标签栏(在下面的链接中的示例图片上显示为绿色箭头)。

我不知道问题出在哪里。知道如何纠正吗?

非常感谢。

带线条的标签栏

4

6 回答 6

11

如果您指的是条形顶部的几个像素阴影,则很容易删除。您所要做的就是在标签栏上启用 clipsToBounds,如下所示:

[self.tabBarController.tabBar setClipsToBounds:YES];
于 2013-09-13T12:31:48.150 回答
5

创建 TabBar 后添加这两行

[[UITabBar appearance] setShadowImage:[[UIImage alloc] init]];
[[UITabBar appearance] setBackgroundImage:[[UIImage alloc] init]];
于 2014-01-31T04:57:15.857 回答
4
UIImage* tabBarBackground = [UIImage imageNamed:@"transparentImage.png"];
[[UITabBar appearance] setShadowImage:tabBarBackground];
[[UITabBar appearance] setBackgroundImage:tabBarBackground];

/////transparentImage.png - 空的 1x1px 图像 //// 它解决了我的问题

于 2013-09-30T11:42:08.800 回答
1

我认为您必须检查 iOS 7 中 UITabBar 的高度。Apple 可能降低了 UITabBar 的高度,根据 UITabBar 的高度,您必须重新设计图像以获得准确的结果。

于 2013-09-13T14:14:30.303 回答
0

使用这个 [[UITabBar 外观] setShadowImage:[UIImage imageNamed:@"transparentImage.png"]];

transparentImage.png 可以是 0 alpha 大小 1x1 像素的图像

于 2013-09-27T13:45:26.327 回答
0

如果您在使用高于 UITabBar 高度的自定义 UITabBarItem 时遇到困难,可以使用 CALayer 实现一个解决方案,让您保留默认的 UITabBar shadowImage 和 backgroundImage(具有模糊效果)。

我在我的 UITabBarController 子类中使用此代码:

- (id) init
{
    if ((self = [super init]))
    {
        self.delegate = self;

        CALayer * superLayer = self.tabBar.layer;
        CALayer * layer = [CALayer layer];
        layer.bounds = CGRectMake (0.0f, 0.0f, 62.0f, 56.0f);
        layer.contents = (id) [UIImage imageNamed: @"custom-tabbaritem"].CGImage;
        layer.anchorPoint = CGPointMake (0.5f, 1.0f);
        layer.position = CGPointMake (superLayer.bounds.size.width / 2.0f, superLayer.bounds.size.height);
        layer.zPosition = 1.0f;
        [self.tabBar.layer addSublayer: layer];
    }

    return self;
}

请注意,您也可以使用和layer.frame = CGRectMake (...)代替。我通过将子层锚定到. 通过实现一个 UITabBarControllerDelegate 方法,例如可以使其执行自定义操作,例如呈现一个模态视图控制器。boundsanchorPointpositionUITabBartabBarController:shouldSelectViewController:UITabBarItem

在这种情况下,我使用 plainUIViewController作为自定义的视图控制器UITabBarItem(其他都是子类):

- (BOOL)  tabBarController: (UITabBarController *) tabBarController
shouldSelectViewController: (UIViewController *) viewController
{
    if ([viewController isMemberOfClass: [UIViewController class]])
    {
        SomeViewController * modal = [SomeViewController new];
        [tabBarController presentViewController: modal
                                       animated: YES
                                     completion: nil];
        modal = nil;

        return NO;
    }

    return YES;
}
于 2013-09-30T15:47:50.763 回答