美文网首页
iOS 系统导航栏有条线

iOS 系统导航栏有条线

作者: 某非著名程序员 | 来源:发表于2019-07-27 23:29 被阅读0次
默认导航栏 添加背景图片后的导航栏

1.系统默认的导航栏有条线
  这条线占一个像素,在@2x的屏幕上高度是0.5,在@3x的屏幕上高度是0.333。在有背景图时是非常丑陋的。颜色是可以设置的。
  去除方法有三种:
  第一种:这种只在第一次设置有效,后面再更改没有效果了,所以我不推荐使用。
[[UINavigationBar appearance] setBackgroundImage:[[UIImage alloc] init] forBarPosition:UIBarPositionAny barMetrics:UIBarMetricsDefault];
[[UINavigationBar appearance] setShadowImage:[[UIImage alloc] init]];
  第二种:
  将UINavigationBar的clipsToBounds属性设成YES。
  这种会把顶部的也给裁掉,不能铺满整个导航栏了。不理想
  第三种:找到黑线的UIImageView,想显示就显示,想隐藏就隐藏,非常完美。

- (void)updateView{
    UIImageView* blackLineImageView = [self findHairlineImageViewUnder:self.navigationBar];

    if ([CMThemeManager isUseDefaultTheme]) {
        blackLineImageView.hidden = NO;
    }else{
        blackLineImageView.hidden = YES;
    }
}

- (UIImageView *)findHairlineImageViewUnder:(UIView *)view
{
    if ([view isKindOfClass:UIImageView.class] && view.bounds.size.height <= 1.0)
    {
        return (UIImageView *)view;
    }
    for (UIView *subview in view.subviews) {
        UIImageView *imageView = [self findHairlineImageViewUnder:subview];
        if (imageView) {
            return imageView;
        }
    }
    return nil;
}

2.UI给的图片最下边有1像素透明。

带透明像素的图片
  这个算是比较坑了,本来系统的线从代码上是找不到的,除非你之前对系统的线就有所了解。解决之后,发现系统的1像素线没有了,但背景图还是有条线,从Debug View Hierarchy或reveal上也看不出来,因为和背景重叠了。最后还是同事提醒了一句,图有问题。顺便提一句,图有问题拖到ps上,一眼就能看出来。又学一招。
3.自定义的navigation也画了条黑线
  解决完上面两个之后,代码中还画了条线,这个比较好解决。由于前两个的影响,也是头痛不已。

总结:一个问题不可怕,可怕的是叠在了一起。连环套,防不胜防。

参考文章:
https://www.jianshu.com/p/202afecc7a9c

相关文章

网友评论

      本文标题:iOS 系统导航栏有条线

      本文链接:https://www.haomeiwen.com/subject/wpchrctx.html