在iOS 7中,Apple已更改UIToolbar
以在其顶部显示1px的发际线。在某些情况下,这在视觉上会分散注意力,并且似乎没有任何公共API可以删除它。
设置shadowImage不起作用。
我正在寻找一种以相对干净的方式去除发际线的方法,并保持普通的背景模糊。
答案 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。
答案 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
}