去掉 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 布局时要计算向下的偏移量