在 iOS 7 中移除 UIToolbar 细线
Posted
技术标签:
【中文标题】在 iOS 7 中移除 UIToolbar 细线【英文标题】:Remove UIToolbar hairline in iOS 7 【发布时间】:2013-10-01 07:57:52 【问题描述】:在 ios 7 中,Apple 已将 UIToolbar
更改为在其顶部显示 1 像素的细线。在某些情况下,这会在视觉上分散注意力,而且似乎没有任何公共 API 可以将其删除。
设置 shadowImage 不起作用。
我正在寻找一种相对干净的方式去除发际线,并保持普通背景模糊。
【问题讨论】:
【参考方案1】:如果设置 youBar.clipsToBounds = YES,细线消失。
希望对您有所帮助。
[编辑]
对于navigationBar底部细线,https://***.com/a/18180330/2011578这里的解决方案也很好用。
【讨论】:
啊,好主意。我还注意到,阴影图像位于导航栏下方 这应该被选为正确答案。这也适用于我。 ? 结合.barStyle = -1
可以实现完全不可见的工具栏(但是 IAS HIG 不确定)
确实是救命稻草。【参考方案2】:
细线边框是工具栏的一个UIImageView子视图,可以这样隐藏:
for (UIView *subView in [self.toolbar subviews])
if ([subView isKindOfClass:[UIImageView class]])
// Hide the hairline border
subView.hidden = YES;
【讨论】:
像这样对内部实现细节做出假设总是一个坏主意。 Apple 可以随时更改实施。【参考方案3】:这条线是它的shadowImage。 它可以通过应用一个空的 UIImage 来简单地删除。 根据文档,您还必须设置自定义背景图片:
- (void)viewDidLoad
[self.navigationController.navigationBar setBackgroundImage:[[UIImage alloc]init] forBarMetrics:UIBarMetricsDefault];
self.navigationController.navigationBar.shadowImage = [[UIImage alloc ]init];
请注意:如果您设置自己的图像以备不时之需,半透明将不起作用。
【讨论】:
我想我应该澄清我的问题。我需要去除发际线,但保持模糊(所以不设置背景图像)。 这在 iOS 6 中可以使用,但在 iOS 7 中,将阴影图像设置为透明图像将不起作用——阴影被绘制的地方有一个非常微弱、明亮的标记。【参考方案4】:使用情节提要时,
self.clipsToBounds = true
可以在运行时属性中为工具栏设置。这将隐藏发际线。 在 iOS 7 和 8 中验证。
【讨论】:
【参考方案5】:可以在故事板上轻松解决:
选择添加为 UIBarButtonItem Container 的 View 并设置其“Clip Subviews”并运行应用程序。
【讨论】:
【参考方案6】:这个解决方案对我有用...在 iOS 7 上试过这个
[self.navigationController.navigationBar setShadowImage:[UIImage new]];
【讨论】:
【参考方案7】:不完全是你想要的,但这个答案肯定会对某人有所帮助。
如果你想改变 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];
【讨论】:
【参考方案8】:虽然有点 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 组件等效果很重要。
【讨论】:
【参考方案9】:在我的情况下,我无法通过 Storyboard 完成这项工作。我最终使用外观代理消除了所有工具栏上的阴影:
[[UIToolbar appearance] setClipsToBounds:YES];
【讨论】:
【参考方案10】:如果您需要隐藏细线并显示阴影剪辑Tobounds 没有帮助
使用:
TOOLBAR.subviews
.filter $0 is UIImageView
.forEach $0.hidden = true
或:
for case let imageView is UIImageView in TOOLBAR.subviews
imageView.hidden = true
【讨论】:
以上是关于在 iOS 7 中移除 UIToolbar 细线的主要内容,如果未能解决你的问题,请参考以下文章
iOS11 SearchController - 从 navigationItem 中移除 SearchBar 会留下损坏的 UI