

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也画了条黑线
解决完上面两个之后,代码中还画了条线,这个比较好解决。由于前两个的影响,也是头痛不已。
总结:一个问题不可怕,可怕的是叠在了一起。连环套,防不胜防。
网友评论