ios7下Tab键控制器上的不需要的行

时间:2013-09-13 12:07:34

标签: uitabbarcontroller ios7 uitabbar uitabbaritem

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

我不知道问题出在哪里。知道怎么纠正吗?

非常感谢。

Tab Bar with a line

6 个答案:

答案 0 :(得分:11)

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

[self.tabBarController.tabBar setClipsToBounds:YES];

答案 1 :(得分:5)

创建TabBar后添加这两行

[[UITabBar appearance] setShadowImage:[[UIImage alloc] init]];
[[UITabBar appearance] setBackgroundImage:[[UIImage alloc] init]];

答案 2 :(得分:4)

UIImage* tabBarBackground = [UIImage imageNamed:@"transparentImage.png"];
[[UITabBar appearance] setShadowImage:tabBarBackground];
[[UITabBar appearance] setBackgroundImage:tabBarBackground];

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

答案 3 :(得分:1)

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

答案 4 :(得分:0)

使用它 [[UITabBar外观] setShadowImage:[UIImage imageNamed:@“transparentImage.png”]];

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

答案 5 :(得分: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 (...)代替boundsanchorPointposition。我通过将子图层锚定到UITabBar的底部来使用这些图像以更好地处理具有各种高度的图像。 通过实现诸如tabBarController:shouldSelectViewController:之类的UITabBarControllerDelegate方法,可以使此UITabBarItem执行自定义操作,例如呈现模态视图控制器。

在这种情况下,我使用普通UIViewController作为自定义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;
}
相关问题