【发布时间】:2013-10-01 07:57:52
【问题描述】:
在 iOS 7 中,Apple 已将 UIToolbar 更改为在其顶部显示 1 像素的细线。在某些情况下,这会在视觉上分散注意力,而且似乎没有任何公共 API 可以将其删除。
设置 shadowImage 不起作用。
我正在寻找一种相对干净的方式去除发际线,并保持普通背景模糊。
【问题讨论】:
标签: ios7
在 iOS 7 中,Apple 已将 UIToolbar 更改为在其顶部显示 1 像素的细线。在某些情况下,这会在视觉上分散注意力,而且似乎没有任何公共 API 可以将其删除。
设置 shadowImage 不起作用。
我正在寻找一种相对干净的方式去除发际线,并保持普通背景模糊。
【问题讨论】:
标签: ios7
如果设置 youBar.clipsToBounds = YES,细线消失。
希望对您有所帮助。
[编辑]
对于navigationBar底部细线,https://stackoverflow.com/a/18180330/2011578这里的解决方案也很好用。
【讨论】:
.barStyle = -1 可以实现完全不可见的工具栏(但是 IAS HIG 不确定)
细线边框是工具栏的一个UIImageView子视图,可以这样隐藏:
for (UIView *subView in [self.toolbar subviews]) {
if ([subView isKindOfClass:[UIImageView class]]) {
// Hide the hairline border
subView.hidden = YES;
}
}
【讨论】:
这条线是它的shadowImage。 它可以通过应用一个空的 UIImage 来简单地删除。 根据文档,您还必须设置自定义背景图片:
- (void)viewDidLoad {
[self.navigationController.navigationBar setBackgroundImage:[[UIImage alloc]init] forBarMetrics:UIBarMetricsDefault];
self.navigationController.navigationBar.shadowImage = [[UIImage alloc ]init];
}
请注意:如果您设置自己的图像以备不时之需,半透明将不起作用。
【讨论】:
使用情节提要时,
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 组件等效果很重要。
【讨论】:
在我的情况下,我无法通过 Storyboard 完成这项工作。我最终使用外观代理消除了所有工具栏上的阴影:
[[UIToolbar appearance] setClipsToBounds:YES];
【讨论】:
如果您需要隐藏细线并显示阴影剪辑Tobounds 没有帮助
使用:
TOOLBAR.subviews
.filter { $0 is UIImageView }
.forEach { $0.hidden = true }
或:
for case let imageView is UIImageView in TOOLBAR.subviews {
imageView.hidden = true
}
【讨论】: