在iOS7之后,self.navigationController.navigationBar.translucent = NO 把導(dǎo)航條這個(gè)屬性設(shè)置為no之后专普,坐標(biāo)怎么向下移動(dòng)了64個(gè)像素點(diǎn)古胆?
由于我要改變導(dǎo)航條的顏色甩骏,然后設(shè)置之后發(fā)現(xiàn)導(dǎo)航條的顏色設(shè)置后并不準(zhǔn)確揖庄,于是把????self.navigationController.navigationBar.translucent = NO??這個(gè)屬性設(shè)置為no诈皿,但是發(fā)現(xiàn)之前所有控件的坐標(biāo)都往下移了溪猿,是因?yàn)閷?dǎo)航條不透明的時(shí)候坐標(biāo)的(0钩杰,0)點(diǎn)在屏幕(0,64)這個(gè)位置么诊县?該怎么設(shè)置敖才?難道以前兩個(gè)月寫的代碼坐標(biāo)全都改一下么依痊?
iOS7之后由于navigationBar.translucent默認(rèn)是YES避除,坐標(biāo)零點(diǎn)默認(rèn)在(0,0)點(diǎn)??當(dāng)不透明的時(shí)候胸嘁,零點(diǎn)坐標(biāo)在(0瓶摆,64);如果你想設(shè)置成透明的性宏,而且還要零點(diǎn)從(0群井,64)開始,那就添加:self.edgesForExtendedLayout = UIRectEdgeNone; 但是目前的需求是:但是我想設(shè)置成不透明的毫胜,還從(0书斜,0)開始。對(duì)于目前的需要要這樣設(shè)置
self.extendedLayoutIncludesOpaqueBars = YES;就可以了酵使。
默認(rèn)navigationBar的是半透明荐吉,那么它半透明是為了什么?答案是為了可以隱約看到Bar后面的內(nèi)容口渔,iOS7以上玩多了的人應(yīng)該有注意到這個(gè)問題吧样屠。好了,默認(rèn)是半透明缺脉,看官方的圖片痪欲,在Bar下方的scrollviewB的frame如果從(0,0)開始,那么我們滾動(dòng)的內(nèi)容從即使?jié)L動(dòng)到Top的位置攻礼,還是可以隱隱約約的看到业踢。
最后一個(gè)介紹的新屬性是extendedLayoutIncludesOpaqueBars,這個(gè)屬性指定了當(dāng)Bar使用了不透明圖片時(shí)秘蛔,視圖是否延伸至Bar所在區(qū)域,默認(rèn)值時(shí)NO傍衡。
我設(shè)置self.navigationController.navigationBar.translucent = YES; self.view是以(0深员,0)為origin,然后設(shè)置scrollview的frame = self.view蛙埂,但是scrollView發(fā)生了44的偏移倦畅,搞了一下午沒解決,看了這篇文章后在viewWillAppear里面加了句self.automaticallyAdjustsScrollViewInsets = NO; 問題一下子就解決了绣的。
補(bǔ)充下:NavigationBar的常用設(shè)置:
self.edgesForExtendedLayout = UIRectEdgeNone;
self.extendedLayoutIncludesOpaqueBars =NO;
self.modalPresentationCapturesStatusBarAppearance =NO;
self.navigationController.navigationBar.translucent =NO;
self.automaticallyAdjustsScrollViewInsets = NO
在IOS7以后 ViewController 開始使用全屏布局的叠赐,而且是默認(rèn)的行為通常涉及到布局
就離不開這個(gè)屬性edgesForExtendedLayout欲账,它是一個(gè)類型為UIExtendedEdge的屬性,
指定邊緣要延伸的方向芭概,它的默認(rèn)值很自然地是UIRectEdgeAll赛不,四周邊緣均延伸,就是說罢洲,
如果即使視圖中上有navigationBar踢故,下有tabBar,那么視圖仍會(huì)延伸覆蓋到四周的區(qū)域惹苗。
因?yàn)橐话銥榱瞬蛔宼ableView 不延伸到 navigationBar 下面殿较, 屬性設(shè)置為?UIRectEdgeNone
UIRectEdgeAll -- default
UIRectEdgeNone
這時(shí)會(huì)發(fā)現(xiàn)導(dǎo)航欄變灰了,處理如下就OK了
self.navigationController.navigationBar.translucent=NO;
那?automaticallyAdjustsScrollViewInsets 呢桩蓉?
當(dāng)?automaticallyAdjustsScrollViewInsets 為 NO 時(shí)淋纲,tableview 是從屏幕的最上邊開始,也就是被
導(dǎo)航欄 & 狀態(tài)欄覆蓋
當(dāng)?automaticallyAdjustsScrollViewInsets 為 YES 時(shí)院究,也是默認(rèn)行為洽瞬,表現(xiàn)就比較正常了,和
edgesForExtendedLayout =?UIRectEdgeNone 有啥區(qū)別儡首? 不注意可能很難覺察
設(shè)計(jì)師可能一眼就看穿片任。。蔬胯。?automaticallyAdjustsScrollViewInsets 為YES 時(shí)对供,
tableView 上下滑動(dòng)時(shí),是可以穿過導(dǎo)航欄&狀態(tài)欄的氛濒,在他們下面有淡淡的淺淺紅色
extendedLayoutIncludesOpaqueBars
首先看下官方解釋产场,默認(rèn) NO, 但是Bar 的默認(rèn)屬性是 透明的舞竿。京景。。也就是說只有在不透明下才有用
但是骗奖,測(cè)試結(jié)果很軟肋确徙,基本區(qū)別不大。执桌。鄙皇。但是對(duì)于解決一些Bug 是還是起作用的,比如說SearchBar的
跳動(dòng)問題仰挣,詳情見:http://www.cnblogs.com/skyming/p/4059128.html伴逸, 其他UITableView,UIScrollView 位置的
問題多數(shù)和這3屬性相關(guān)。膘壶。
參考文章:
http://www.cocoachina.com/bbs/read.php?tid-298675-page-1.html
http://www.cocoachina.com/bbs/read.php?tid=280826
http://www.vinqon.com/codeblog/?detail/11109
http://www.geekcome.com/content-10-10502-1.html