在iOS 7中删除UIToolbar发际线

时间:2013-10-01 07:57:52

标签: ios7

在iOS 7中,Apple已更改UIToolbar以在其顶部显示1px的发际线。在某些情况下,这在视觉上会分散注意力,并且似乎没有任何公共API可以删除它。

设置shadowImage不起作用。

我正在寻找一种以相对干净的方式去除发际线的方法,并保持普通的背景模糊。

10 个答案:

答案 0 :(得分:83)

如果设置youBar.clipsToBounds = YES,则发线会消失。

希望得到这个帮助。

[编辑]

对于navigationBar底部发际线,此处https://stackoverflow.com/a/18180330/2011578的解决方案也很有用。

答案 1 :(得分:5)

细线边框是工具栏的UIImageView子视图,你可以像这样隐藏它:

        for (UIView *subView in [self.toolbar subviews]) {
            if ([subView isKindOfClass:[UIImageView class]]) {
                // Hide the hairline border
                subView.hidden = YES;
            }
        }

答案 2 :(得分:5)

这条线是它的shadowImage。 可以通过应用空的UIImage简单地删除它。 根据文档,您还必须设置自定义背景图片

- (void)viewDidLoad {
  [self.navigationController.navigationBar setBackgroundImage:[[UIImage alloc]init] forBarMetrics:UIBarMetricsDefault];
  self.navigationController.navigationBar.shadowImage = [[UIImage alloc ]init];
}

请注意:如果您需要设置自己的图像,半透明效果将不起作用。

答案 3 :(得分:4)

使用故事板时,

self.clipsToBounds = true
可以在Runtime属性中为工具栏设置

。这将隐藏发际线。 已在iOS 7和8中验证。

答案 4 :(得分:2)

可以在故事板上轻松解决:

选择添加为UIBarButtonItem Container&设置其“剪辑子视图”&运行app。

enter image description here

答案 5 :(得分:1)

这个解决方案对我有用...试用iOS 7

[self.navigationController.navigationBar setShadowImage:[UIImage new]];

答案 6 :(得分:1)

不完全是你想要的,但肯定这个答案对某人有帮助。

如果要更改UINavigationBar或UIToolbar的底部边框(阴影)颜色而不是隐藏它,则应将背景图像和阴影图像设置为条形。

更改UINavigationBar的底部边框(阴影)

  

[self.navigationController.navigationBar setBackgroundImage:[UIImage imageNamed:@" yourImageName"] forBarMetrics:UIBarMetricsDefault];        [self.navigationController.navigationBar setShadowImage:[UIImage imageNamed:@" yourImageName"]];

更改UIToolbar的底部边框(阴影)

  

[yourToolBar setBackgroundImage:[UIImage imageNamed:@" yourImageName"]   forToolbarPosition:UIBarPositionBottom   barMetrics:UIBarMetricsDefault];

     

[yourToolBar setShadowImage:[UIImage imageNamed:@" yourImageName"]   forToolbarPosition:UIBarPositionBottom];

答案 7 :(得分:1)

虽然有点hacky,继承UITabBar并覆盖- (void)addSubview:方法,但我们可以阻止将hairline分隔符添加到视图层次结构中:

- (void)addSubview:(UIView *)view {
    if ([view isKindOfClass:[UIImageView class]] && view.bounds.size.height < 2.0f) {
        return;
    }
    [super addSubview:view]; 
}

这样我们就可以获得模糊的标签栏并删除细线分隔符。它还确保UITabBar不会将视图剪辑到边界,这对于大型中心按钮或其他UI组件等效果非常重要。

答案 8 :(得分:0)

在我的案例中,我无法通过Storyboard实现这一点。我最终使用外观代理消除了我所有工具栏上的阴影:

[[UIToolbar appearance] setClipsToBounds:YES];

答案 9 :(得分:0)

如果您需要隐藏发际线并显示阴影片段,则无法帮助

使用:

TOOLBAR.subviews
      .filter { $0 is UIImageView }
      .forEach { $0.hidden = true }

或:

for case let imageView is UIImageView in TOOLBAR.subviews {
    imageView.hidden = true 
}