IOS 自定义UINavigationController中navigationBar的高度

 

//头文件

//继承 UINavigationBar

@interface MyNavigationBar : UINavigationBar
@end

//oc文件

#import "MyNavigationBar.h"


#define NavigationBar_H 44
@implementation MyNavigationBar
- (void)layoutSubviews {
    [super layoutSubviews];
    
    CGRect selfFrame = self.frame;
    selfFrame.origin.y = 0;
    self.frame = selfFrame;
    
    CGRect mFrame = CGRectZero;
    
    for (UIView *aView in self.subviews) {
        NSString*aString = NSStringFromClass([aView class]);
        if ([@[@"_UIBarBackground"] containsObject:aString]) {
            CGRect frame = aView.frame;
            frame.size.height = NavigationBar_H;
            frame.origin.y = 0;
            aView.frame = frame;
            NSLog(@"aView.frame,%f",frame.origin.y);
            mFrame = frame;
            aView.backgroundColor = kHexColor(Bar_Color);
            for (UIView*bView in aView.subviews) {
                NSString*bString = NSStringFromClass([bView class]);
                if ([@"UIVisualEffectView" containsString:bString]) {
                    bView.hidden = YES;
                }
                if([bView isKindOfClass:UIImageView.class]&&bView.bounds.size.height <= 1.0){
                    bView.hidden = YES;
                }
            }
        }
        
        if ([@[@"_UINavigationBarContentView"] containsObject:aString]) {
            aView.frame = mFrame;
        }
    }
}
@end

 

用法一:

UINavigationController*nav = [UINavigationController new];

[nav setValue:[MyNavigationBar new] forKeyPath:@"navigationBar"];

 

用法二(强烈推荐,更加适配iphoneX):

#pragma mark 自定义NavigationViewController

@interface BaseNavigationViewController : UINavigationController
@end

@interface BaseNavigationViewController ()
@end

@implementation BaseNavigationViewController
- (void)viewDidLoad
{   
    [super viewDidLoad];
    [self setValue:[MyNavigationBar new] forKeyPath:@"navigationBar"];
}
//写这一个是为了适配iphoneX,就算空实现也要写,不写的话,导航栏的坐标设置不生效,挺奇怪的
-(void)viewDidAppear:(BOOL)animated{
}
@end

 

即可!已经适配iphoneX

附上demo

https://download.youkuaiyun.com/download/u010775335/10907262

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

大炮走火

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值