您的位置:首页 > 移动开发 > IOS开发

iOS NavigationBar的占位问题

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

总结:
self.edgesForExtendedLayout
= UIRectEdgeTop;
self.edgesForExtendedLayout =
UIRectEdgeNone;

    当属性设置为UIRectEdgeTop的时候,计算frame的时候的零点依旧是屏幕的左上角,忽略navigationbar的影响,(0,0)点依旧是屏幕的左上角,

  当属性设置为UIRectEdgeNone的时候,主View是tableView或者是CollectionView的时候cell显示起点是(0,64),但是主视图的起点还是(0,0),因为这个原因,系统自动的向下偏移了64(navigationBar的高度) ,这时就需要手动的改变view的height,需要在原来的基础上减去64,但是其他的非scrollView的时候就会被导航栏挡住(其实状态栏也参与了遮挡视图)。

    当使用frame设置view位置的时候,self。view的高度还是当前屏幕的高度,要想显示的刚刚好,并且依靠self。view的frame来计算的话,就需要减去navigationBar的高度和ToolVBar的高度(要是存在toolBar的时候),其实当出现ToolBar的时候,self。view的底部并没有到屏幕的底部(xcode的层级关系查看器显示的View的底部是在ToolBar的顶部),但是高度却是整个屏幕的高度。

    当使用masonry布局的时候,只需要在顶部偏移64个像素,底部和self。view冲齐就可以了

这是从网上找的其它的帖子的内容:从iOS7开始,苹果对navigationBar进行了模糊处理,并把self.navigationController.navigationBar.translucent
= YES 作为默认处理。对此苹果注释的解释为 // Default is NO on iOS 6 and earlier. Always YES if barStyle is set to UIBarStyleBlackTranslucent

     这时候就会出现一个问题,当你push的控制器以ScrollView或TableView为主View时,模糊处理会使状态栏和NavigationBar挡住后面的视图,所以苹果会自动把主View的内容向下移动64px,同理,底部Tabbar会使主View向上偏移49px,Toolbar会是主View向上偏移44px

     当你不想让主View自动发生偏移时:

     self.automaticallyAdjustsScrollViewInsets = NO;//    自动滚动调整,默认为YES

     当你不想要navigationBar进行模糊处理时:

     self.navigationController.navigationBar.translucent = NO;//    Bar的模糊效果,默认为YES

     但是,这样又会产生一个问题,由于无法看到navigationBar背后的视图,主View又会整体下移64px

     ,但是,注意主View的origin.y = 0!!!

     如何不让主View上的整体布局下移:

     //第一步调整主View的 y


     self.edgesForExtendedLayout = UIRectEdgeNone;//    iOS7及以后的版本支持,self.view.frame.origin.y会下移64像素至navigationBar下方

     //第二步更改主View的 height


     self.view.height = HHScreenH - 64;
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: