iOS开发-导航栏UINavigationBar隐藏底部线及透明度

iOS 导航栏UINavigationBar隐藏底部线及透明度

苹果官方给出的解释:

如果你不调用方法设置一张背景图片的话,那就给你默认一张,然后同时还有一张阴影图片被默认设置上去,这就是导航栏上1px黑线的由来。

解决办法:

方法1.就用上面说的那个方法,设置一张背景图片,然后在设置一张shadowImage就可以了:

复制代码
self.navigationBar = [UINavigationBar appearanceWhenContainedIn:self, nil];
[self.navigationBar setBackgroundImage:[[UIImage alloc] init] forBarPosition:UIBarPositionAny barMetrics:UIBarMetricsDefault]];
[self.navigationBar setShadowImage:[[UIImage alloc] init]]];

方法2:将UINavigationBar的clipsToBounds属性设成YES。

复制代码
 self.navigationBar = [UINavigationBar appearanceWhenContainedIn:self, nil];
 self.navigationBar.clipsToBounds=YES;
 //去掉导航条的半透明
 self.navigationBar.translucent = NO;

方法3:循环遍历一下UINavigationBar的所有子视图,发现有UIImageView类型的视图就remove掉,或者设成隐藏状态(hidden)。

复制代码
- (void)setNavigationStyle {
    [self setBackgroundImage];
    
    UIColor *color = K_NAVBAR_ITEM;
    if (IS_IOS7_OR_LATER) {
        self.navigationBar.tintColor = color;
        self.navigationBar.barTintColor = color;
    } else {
        self.navigationBar.tintColor = color;
    }
    
    [self.navigationBar setTitleTextAttributes:@{NSForegroundColorAttributeName:[UIColor colorWithHexString:@"ffffff"],NSFontAttributeName:[UIFont systemFontOfSize:18]}];
}

- (void)setBackgroundImage {
    
    UIImage *placeholderImage = [UIImage imageWithColor:[UIColor colorWithHexString:@"3b93ff"] size:CGSizeMake(20.0, 20.0)];
    placeholderImage = [placeholderImage stretchableImageWithLeftCapWidth:placeholderImage.leftCapWidth*0.5 topCapHeight:placeholderImage.topCapHeight*0.5];

    if (IS_IOS7_OR_LATER) {
        
        [self.navigationBar setBackgroundImage:placeholderImage forBarPosition:UIBarPositionTop barMetrics:UIBarMetricsDefault];
        //iOS7 阴影需单独设定 UIColor clearColor 是去掉字段 1像素阴影]
        [self.navigationBar setShadowImage:[UIImage imageWithColor:RGBA(37.0, 37.0, 37.0, 0.8) size:CGSizeMake(self.navigationBar.frame.size.width, 0.125)]];
    } else {
        [self.navigationBar setBackgroundImage:placeholderImage forBarMetrics:UIBarMetricsDefault];
    }
    
    self.navigationBar.translucent = NO;
    self.navigationBar.clipsToBounds=YES;
}

学习记录,每天不停进步。

相关推荐
Frank学习路上5 小时前
【IOS】XCode创建firstapp并运行(成为IOS开发者)
开发语言·学习·ios·cocoa·xcode
瓜子三百克11 小时前
CALayer的异步处理
macos·ios·cocoa
吴Wu涛涛涛涛涛Tao12 小时前
一步到位:用 Very Good CLI × Bloc × go_router 打好 Flutter 工程地基
flutter·ios
Fine姐12 小时前
传感器WSNs TheDataLinkLayer——B-MAC
macos
九丝城主12 小时前
2025使用VM虚拟机安装配置Macos苹果系统下Flutter开发环境保姆级教程--中篇
服务器·flutter·macos·vmware
呆萌的代Ma13 小时前
解决Mac上的老版本docker desktop 无法启动/启动后一直转圈/无法登陆账号的问题
macos·docker·eureka
fengyun289114 小时前
Omi录屏专家 Screen Recorder by Omi 屏幕录制Mac
macos·mac·录屏·屏幕录制
杂雾无尘14 小时前
开发者必看:如何在 iOS 应用中完美实现动态自定义字体!
ios·swift·apple
kymjs张涛16 小时前
零一开源|前沿技术周报 #6
前端·ios·harmonyos
不学会Ⅳ18 小时前
Mac M芯片搭建jdk源码环境(jdk24)
java·开发语言·macos