在 iOS 7 中,Apple 已更改UIToolbar
为在其顶部显示 1px 细线。在某些情况下,这在视觉上会分散注意力,并且似乎没有任何公共 API 可以将其删除。
设置 shadowImage 不起作用。
我正在寻找一种以相对干净的方式去除发际线的方法,并保持普通背景模糊。
在 iOS 7 中,Apple 已更改UIToolbar
为在其顶部显示 1px 细线。在某些情况下,这在视觉上会分散注意力,并且似乎没有任何公共 API 可以将其删除。
设置 shadowImage 不起作用。
我正在寻找一种以相对干净的方式去除发际线的方法,并保持普通背景模糊。
如果设置youBar.clipsToBounds = YES,细线消失。
希望这有帮助。
[编辑]
对于 navigationBar 底部细线,这里的解决方案https://stackoverflow.com/a/18180330/2011578也很好用。
这条线是它的shadowImage。它可以通过应用一个空的 UIImage 来简单地删除。 根据文档,您还必须设置自定义背景图像:
- (void)viewDidLoad {
[self.navigationController.navigationBar setBackgroundImage:[[UIImage alloc]init] forBarMetrics:UIBarMetricsDefault];
self.navigationController.navigationBar.shadowImage = [[UIImage alloc ]init];
}
请注意:如果您设置自己的图像以防万一,半透明将不起作用。
细线边框是工具栏的一个 UIImageView 子视图,你可以像这样隐藏它:
for (UIView *subView in [self.toolbar subviews]) {
if ([subView isKindOfClass:[UIImageView class]]) {
// Hide the hairline border
subView.hidden = YES;
}
}
使用情节提要时,
self.clipsToBounds = true
可以在运行时属性中为工具栏设置。这将隐藏发际线。在 iOS 7 和 8 中验证。
它可以在故事板上轻松解决:
选择添加为 UIBarButtonItem Container 的 View 并设置其“Clip Subviews”并运行应用程序。
这个解决方案对我有用......在 iOS 7 上试过这个
[self.navigationController.navigationBar setShadowImage:[UIImage new]];
不完全是你想要的,但这个答案肯定会对某人有所帮助。
如果要更改 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];
虽然有些 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 组件等效果很重要。
如果您需要隐藏细线并显示阴影剪辑Tobounds 无济于事
利用:
TOOLBAR.subviews
.filter { $0 is UIImageView }
.forEach { $0.hidden = true }
或者:
for case let imageView is UIImageView in TOOLBAR.subviews {
imageView.hidden = true
}
在我的情况下,我无法通过 Storyboard 完成这项工作。我最终使用外观代理来消除所有工具栏上的阴影:
[[UIToolbar appearance] setClipsToBounds:YES];