iOS NavigationBar的占位问题

使用NavigationController的时候,在页面中添加视图的时候,NavigationBar造成的偏移量的问题。(之前都是遇到的时候就手动的改变偏移量使其能够正常显示,并没有深究过)。

总结:
self.edgesForExtendedLayout = UIRectEdgeTop;
self.edgesForExtendedLayout = UIRectEdgeNone;
    当属性设置为UIRectEdgeTop的时候,计算frame的时候的零点依旧是屏幕的左上角,忽略navigationbar的影响,(00)点依旧是屏幕的左上角,
  
当属性设置为UIRectEdgeNone的时候,主ViewtableView或者是CollectionView的时候cell显示起点是(064),但是主视图的起点还是(0,0),因为这个原因,系统自动的向下偏移了64(navigationBar的高度) ,这时就需要手动的改变viewheight,需要在原来的基础上减去64,但是其他的非scrollView的时候就会被导航栏挡住(其实状态栏也参与了遮挡视图)。
    当使用frame设置view位置的时候,selfview的高度还是当前屏幕的高度,要想显示的刚刚好,并且依靠selfviewframe来计算的话,就需要减去navigationBar的高度和ToolVBar的高度(要是存在toolBar的时候),其实当出现ToolBar的时候,selfview的底部并没有到屏幕的底部(xcode的层级关系查看器显示的View的底部是在ToolBar的顶部),但是高度却是整个屏幕的高度。
    当使用masonry布局的时候,只需要在顶部偏移64个像素,底部和selfview冲齐就可以了

这是从网上找的其它的帖子的内容:iOS7开始,苹果对navigationBar进行了模糊处理,并把self.navigationController.navigationBar.translucent = YES 作为默认处理。对此苹果注释的解释为 // Default is NO on iOS 6 and earlier. Always YES if barStyle is set to UIBarStyleBlackTranslucent
    
这时候就会出现一个问题,当你push的控制器以ScrollViewTableView为主View时,模糊处理会使状态栏和NavigationBar挡住后面的视图,所以苹果会自动把主View的内容向下移动64px,同理,底部Tabbar会使主View向上偏移49pxToolbar会是主View向上偏移44px
    
当你不想让主View自动发生偏移时:
     self.automaticallyAdjustsScrollViewInsets = NO;//   
自动滚动调整,默认为YES
    
当你不想要navigationBar进行模糊处理时:
     self.navigationController.navigationBar.translucent = NO;//    Bar
的模糊效果,默认为YES
    
但是,这样又会产生一个问题,由于无法看到navigationBar背后的视图,主View又会整体下移64px
    
,但是,注意主Vieworigin.y = 0!!!
    
如何不让主View上的整体布局下移:
     //
第一步调整主View y
     self.edgesForExtendedLayout = UIRectEdgeNone;//    iOS7
及以后的版本支持,self.view.frame.origin.y会下移64像素至navigationBar下方
     //
第二步更改主View height

     self.view.height = HHScreenH - 64;

iOS中,可以通过以下方式自定义NavigationBar: 1. 设置NavigationBar的背景色和透明度 ```swift // 设置NavigationBar的背景色 navigationController?.navigationBar.barTintColor = UIColor.red // 设置NavigationBar的透明度 navigationController?.navigationBar.isTranslucent = true ``` 2. 设置NavigationBar的标题和字体样式 ```swift // 设置NavigationBar的标题 navigationItem.title = "Custom Title" // 设置NavigationBar的字体样式 navigationController?.navigationBar.titleTextAttributes = [NSAttributedString.Key.font: UIFont.boldSystemFont(ofSize: 18), NSAttributedString.Key.foregroundColor: UIColor.white] ``` 3. 设置NavigationBar的返回按钮和图片 ```swift // 设置NavigationBar的返回按钮 let backButton = UIBarButtonItem(title: "", style: .plain, target: nil, action: nil) navigationItem.backBarButtonItem = backButton // 设置NavigationBar的返回图片 let backImage = UIImage(named: "back") navigationController?.navigationBar.backIndicatorImage = backImage navigationController?.navigationBar.backIndicatorTransitionMaskImage = backImage ``` 4. 隐藏NavigationBar ```swift // 隐藏NavigationBar navigationController?.navigationBar.isHidden = true ``` 5. 自定义NavigationBar的左右按钮 ```swift // 自定义NavigationBar的左按钮 let leftButton = UIBarButtonItem(title: "Left", style: .plain, target: self, action: #selector(leftButtonTapped)) navigationItem.leftBarButtonItem = leftButton // 自定义NavigationBar的右按钮 let rightButton = UIBarButtonItem(title: "Right", style: .plain, target: self, action: #selector(rightButtonTapped)) navigationItem.rightBarButtonItem = rightButton // 左按钮点击事件 @objc func leftButtonTapped() { // do something } // 右按钮点击事件 @objc func rightButtonTapped() { // do something } ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值