29

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

设置 shadowImage 不起作用。

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

4

10 回答 10

84

如果设置youBar.clipsToBounds = YES,细线消失。

希望这有帮助。

[编辑]

对于 navigationBar 底部细线,这里的解决方案https://stackoverflow.com/a/18180330/2011578也很好用。

于 2013-10-14T13:25:48.930 回答
5

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

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

请注意:如果您设置自己的图像以防万一,半透明将不起作用。

于 2013-10-14T10:16:11.900 回答
5

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

        for (UIView *subView in [self.toolbar subviews]) {
            if ([subView isKindOfClass:[UIImageView class]]) {
                // Hide the hairline border
                subView.hidden = YES;
            }
        }
于 2013-10-13T12:41:33.097 回答
4

使用情节提要时,

self.clipsToBounds = true

可以在运行时属性中为工具栏设置。这将隐藏发际线。在 iOS 7 和 8 中验证。

于 2014-11-12T06:13:40.903 回答
2

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

选择添加为 UIBarButtonItem Container 的 View 并设置其“Clip Subviews”并运行应用程序。

在此处输入图像描述

于 2014-12-26T15:50:58.463 回答
1

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

[self.navigationController.navigationBar setShadowImage:[UIImage new]];
于 2014-01-23T08:14:04.323 回答
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];

于 2014-05-16T17:17:27.753 回答
1

虽然有些 hacky,子类UITabBar化和覆盖该- (void)addSubview:方法,但我们可以完全防止细线分隔符被添加到视图层次结构中:

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

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

于 2015-07-27T16:25:38.070 回答
0

如果您需要隐藏细线并显示阴影剪辑Tobounds 无济于事

利用:

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

或者:

for case let imageView is UIImageView in TOOLBAR.subviews {
    imageView.hidden = true 
}
于 2016-09-15T12:38:46.987 回答
0

在我的情况下,我无法通过 Storyboard 完成这项工作。我最终使用外观代理来消除所有工具栏上的阴影:

[[UIToolbar appearance] setClipsToBounds:YES];

于 2015-09-22T01:28:12.023 回答