在 Autolayout 项目中自定义 NavigationBar

去掉 iOS 的 NavigationBar

iOS 原生的 navigationBar 为开发者提供了很多方便,但讲道理的说这个控件也是非常恶心,定制度很高,难以自定义
我们可以采用如下的代码把 navigationBar 隐藏掉

    self.navigationController.navigationBarHidden = YES;

但是如果项目使用了 Autolayout 而一开始并没有采用自定义的 navigationBar,为了开发新需求要求自定义 , 隐藏掉 navigationBar 会使视图上升44个像素点,调整所有视图约束会很不方便,这里提供一个野路子

viewController 默认的 view 会有4条和 layoutGuide 相关的约束,我们可以调整它的顶部约束的值使得 view 向下偏移,留出给我们自定义 navigationBar 的空间

@interface BaseViewController ()

@property (strong, nonatomic) NSLayoutConstraint *viewMarginTop;

@end

@implementation EHBaseViewController

- (void)viewDidLoad {
    [super viewDidLoad];
    for (NSLayoutConstraint *constraint in self.view.constraints) {
        if (constraint.firstAttribute == NSLayoutAttributeTop && constraint.secondAttribute == NSLayoutAttributeTop) {
            viewMarginTop = constraint;
        }
    }
    viewMarginTop.constant = 44;
}

@end

这样视图会向下偏移44设计像素而原来使用 Autolayout 布局的 Storyboard 和 xib 文件不需要任何改动也可偏移,navigationBar 使用一个 UIView 实现就好,这里就不提供代码了

注意使用 frame 布局时要计算向下的偏移量

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值