【问题标题】:Remove UIToolbar hairline in iOS 7在 iOS 7 中移除 UIToolbar 细线
【发布时间】:2013-10-01 07:57:52
【问题描述】:

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

设置 shadowImage 不起作用。

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

【问题讨论】:

    标签: ios7


    【解决方案1】:

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

    希望对您有所帮助。

    [编辑]

    对于navigationBar底部细线,https://stackoverflow.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 
                }
                

                【讨论】:

                  猜你喜欢
                  • 2014-09-23
                  • 1970-01-01
                  • 1970-01-01
                  • 1970-01-01
                  • 1970-01-01
                  • 2013-09-26
                  • 1970-01-01
                  • 1970-01-01
                  • 1970-01-01
                  相关资源
                  最近更新 更多