Navigation全透明的实现

上代码,看实现:

/**
 navigation全透明实现方法

 @param currentNav 当前全透明的NavigationController
 */
+ (void)transparentFullyWith:(UINavigationController *)currentNav{
    
    UIView *barBack = currentNav.navigationBar.subviews[0];
    
    [barBack setAlpha:0];
    
    UIView *line = [barBack valueForKeyPath:@"_shadowView"];
    
    [line setHidden:YES];
    
    if (@available(iOS 11.0,*)) {
        
        [barBack.subviews setValue:@(0) forKeyPath:@"alpha"];
    }
    //设置标题字体颜色为白色
    [currentNav.navigationBar setTitleTextAttributes:@{NSForegroundColorAttributeName:[UIColor whiteColor]}];
}

需要注意的是,因为navigationController是共用的,在当前页面消失的时候,需要重新将navigation的属性进行复位处理,这样才能在其他页面保持正常,避免出现没有底部线条的情况。

+ (void)transparentRecoverWith:(UINavigationController *)currentNav{
    
    UIView *barBack = currentNav.navigationBar.subviews[0];
    
    [barBack setAlpha:1.0];
    
    UIView *line = [barBack valueForKeyPath:@"_shadowView"];
    
    [line setHidden:NO];
    
    if (@available(iOS 11.0,*)) {
        
        [barBack.subviews setValue:@(1) forKeyPath:@"alpha"];
    }
    
    [currentNav.navigationBar setTitleTextAttributes:@{NSForegroundColorAttributeName:[UIColor blackColor]}];
}

授人以鱼不如授人以渔!总结这个方法的核心在于对 keyPath的使用,可以用这样的方法访问并且操作很多苹果没有暴露出来的对象和属性。
例如,barBack是这样的样子:


barBack的子视图.png
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容