關(guān)于導(dǎo)航欄之不用代碼實(shí)現(xiàn)側(cè)滑

關(guān)于導(dǎo)航欄,先來看一張用storyboard拖出來的item

大家可以看得到.這個(gè)就是我們每天都在用的東西,很熟悉吧? 請(qǐng)用代碼實(shí)現(xiàn)一下吧.

當(dāng)時(shí)心里那個(gè)叫輕視,可是做起來的時(shí)候發(fā)現(xiàn),跟預(yù)期的簡單往往不是那么一回事.

?創(chuàng)建一個(gè)UINavigationBar

UINavigationBar *bar = [[UINavigationBar alloc]initWithFrame:CGRectMake(0, 0, 320, 80)];

[self.view?addSubview:bar];

我們可以設(shè)置導(dǎo)航欄的風(fēng)格屬性,從iOS6之后运沦,UINavigationBar默認(rèn)為半透明的樣式下面就是官方的api?

現(xiàn)在只有兩個(gè)可以用的了.

UIBarStyleDefault? ? ? ? ? = 0,//默認(rèn)

UIBarStyleBlack? ? ? ? ? ? = 1,//黑色默認(rèn)是YES,如果設(shè)置成YES 实檀,放了一副不透明的圖,那么效果是自動(dòng)會(huì)把這個(gè)圖弄成半透明;

如果設(shè)置成NO,放了一副半透明的圖或南,

如果barstyle是UIBarStyleBlack菩暗,效果是半透明的圖自動(dòng)加上黑色背景

如果barstyle是UIBarStyleDefault,效果是半透明的圖自動(dòng)加上白色背景

如果設(shè)置了barTintColor,效果是半透明的圖自動(dòng)加上barTintColor的背景


默認(rèn)是YES授账,如果設(shè)置成YES ,放了一副不透明的圖惨驶,那么效果是自動(dòng)會(huì)把這個(gè)圖弄成半透明;默認(rèn)是YES白热,如果設(shè)置成YES ,放了一副不透明的圖粗卜,那么效果是自動(dòng)會(huì)把這個(gè)圖弄成半透明;

如果設(shè)置成NO,放了一副半透明的圖屋确,

如果barstyle是UIBarStyleBlack,效果是半透明的圖自動(dòng)加上黑色背景

如果barstyle是UIBarStyleDefault续扔,效果是半透明的圖自動(dòng)加上白色背景

如果設(shè)置了barTintColor,效果是半透明的圖自動(dòng)加上barTintColor的背景

如果設(shè)置成NO,放了一副半透明的圖攻臀,

說一下用代碼是怎么加item的吧.

核心代碼?

UIButton *cancel = [UIButton hm_buttonWithTitle:@"左item" fontSize:18 textColor:[UIColor whiteColor]];

[cancel addTarget:self action:@selector(cancelAction:) forControlEvents:UIControlEventTouchUpInside];

UIBarButtonItem *left = [[UIBarButtonItem alloc] initWithCustomView:cancel];

self.navigationItem.leftBarButtonItem = left;

self.title = @"TitleView";

隱藏tabBar

一句代碼隱藏

? ? self.navigationController.toolbarHidden = NO;

在說點(diǎn)有趣的事情

scrollView 的偏移 整體偏移64 相信大家都有遇到過吧? 別告訴我說沒有.

之前,也是一直迷迷糊糊的.直到我在瀏覽博客的時(shí)候,無意中發(fā)現(xiàn)如下,

extendedLayoutIncludesOpaqueBars

automaticallyAdjustsScrollViewInsets

edgesForExtendedLayout

上面這個(gè)三個(gè)屬性是什么鬼? 中間那個(gè)我好像有用到過.那么迷糊就對(duì)了.下面是三個(gè)屬性的解釋

? ? ? ? ? ?首先要提到iOS6和iOS7的差異,在iOS6中纱昧,默認(rèn)布局是忽略了navigationBar以及tabBar所占的位置刨啸,在中間布局;但是iOS7中识脆,默認(rèn)布局是撐滿整個(gè)屏幕的设联,也就是說view的頂部64像素以及底部49像素是分別被navigationBar和TabBar所遮擋的。于是灼捂,蘋果提供了幾個(gè)API供我們使用:

? ? ? ?automaticallyAdjustsScrollViewInsets 默認(rèn)值YES: 從名字上看就非常的直觀仑荐,比如一個(gè)tableView的布局撐滿了整個(gè)屏幕時(shí),這個(gè)屬性會(huì)自動(dòng)設(shè)置contentInset以避免內(nèi)容被遮擋纵东,在一個(gè)有導(dǎo)航欄的view上添加的第一個(gè)scrollView的內(nèi)容會(huì)自動(dòng)向下偏移64個(gè)像素。

? ? ? ? ? ?edgesForExtendedLayout 默認(rèn)值UIRectEdgeAll:默認(rèn)即布局時(shí)撐滿屏幕啥寇,如果設(shè)置為None就與iOS6時(shí)期的布局一樣偎球。

? ? ? extendedLayoutIncludesOpaqueBars 默認(rèn)值NO:產(chǎn)生bug的關(guān)鍵就在于這個(gè)屬性,先看他的意思辑甜,詢問當(dāng)遇到不透明的bar時(shí)是否延伸布局衰絮,默認(rèn)為NO,導(dǎo)航欄設(shè)置了完全不透明的圖片作為背景磷醋,當(dāng)再次返回的時(shí)候猫牡,界面重新布局,導(dǎo)致整體向下偏移64個(gè)像素 邓线。

總結(jié)一下,無非就是ios6 跟iOS7的差異.理解就好,如果不明白回頭再看.

部分內(nèi)容參考自博客 ?點(diǎn)擊瀏覽?

在看一個(gè)效果


因?yàn)檫@個(gè)截屏軟件的愿意不是很溜 :

用一句話來說就是,不用一行代碼 實(shí)現(xiàn)側(cè)滑功能!

很溜是吧?那讓我來講下原理唄?

其實(shí)大家想一想,側(cè)滑很無非就是清掃的時(shí)候,push一個(gè)界面對(duì)不對(duì)?

使用runtime在Load方法里交換蘋果原聲api的

self.navigationController pushViewController:<#(nonnull UIViewController *)#> animated:<#(BOOL)#>

這個(gè)方法 在自己定義一個(gè)委托Delegate,繼承自NSObject元類,遵守UIGestureRecognizerDelegate 協(xié)議,實(shí)現(xiàn)- (BOOL)gestureRecognizerShouldBegin:(UIPanGestureRecognizer *)gestureRecognizer 方法

在使用Method消息轉(zhuǎn)發(fā)機(jī)制 利用runtime截取apiclass_getInstanceMethod 交換兩個(gè)方法的實(shí)現(xiàn).

懵逼不?簡單不?哈哈哈,那么我說人話.

那么如果用自己定義一個(gè)手勢方法跟系統(tǒng)的Push方法進(jìn)行交換,在我用手勢的時(shí)候把系統(tǒng)的push方法給替換掉不就可以?

想實(shí)現(xiàn),其實(shí)寫都不用寫,我已經(jīng)上傳到github 大家直接點(diǎn)start 點(diǎn)贊下載就好?

點(diǎn)擊下載

介紹下自己的小框架吧,里面有各種各樣的語法糖 看到這個(gè)沒有


這里有一個(gè)文本輸入框 ,里面有占位圖片,占位文字.手打很麻煩吧?

看下實(shí)現(xiàn)吧


在給你溜一個(gè).


如果有心人,可以看到,這些都是分類,分類.意味著,你導(dǎo)入Pch文件中,你不需要繼承任何類,沒有一點(diǎn)侵略性.

天色一晚.還有很多很多想和你們分享.如果滿意還請(qǐng)給我點(diǎn)個(gè)贊.支持下~~~指尖猿

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末淌友,一起剝皮案震驚了整個(gè)濱河市煌恢,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌震庭,老刑警劉巖瑰抵,帶你破解...
    沈念sama閱讀 218,755評(píng)論 6 507
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異器联,居然都是意外死亡二汛,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,305評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門拨拓,熙熙樓的掌柜王于貴愁眉苦臉地迎上來肴颊,“玉大人,你說我怎么就攤上這事渣磷⌒鲎牛” “怎么了?”我有些...
    開封第一講書人閱讀 165,138評(píng)論 0 355
  • 文/不壞的土叔 我叫張陵幸海,是天一觀的道長祟身。 經(jīng)常有香客問我,道長物独,這世上最難降的妖魔是什么袜硫? 我笑而不...
    開封第一講書人閱讀 58,791評(píng)論 1 295
  • 正文 為了忘掉前任,我火速辦了婚禮挡篓,結(jié)果婚禮上婉陷,老公的妹妹穿的比我還像新娘。我一直安慰自己官研,他們只是感情好秽澳,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,794評(píng)論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著戏羽,像睡著了一般担神。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上始花,一...
    開封第一講書人閱讀 51,631評(píng)論 1 305
  • 那天妄讯,我揣著相機(jī)與錄音,去河邊找鬼酷宵。 笑死亥贸,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的浇垦。 我是一名探鬼主播炕置,決...
    沈念sama閱讀 40,362評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢(mèng)啊……” “哼!你這毒婦竟也來了朴摊?” 一聲冷哼從身側(cè)響起默垄,我...
    開封第一講書人閱讀 39,264評(píng)論 0 276
  • 序言:老撾萬榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎仍劈,沒想到半個(gè)月后厕倍,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,724評(píng)論 1 315
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡贩疙,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,900評(píng)論 3 336
  • 正文 我和宋清朗相戀三年讹弯,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片这溅。...
    茶點(diǎn)故事閱讀 40,040評(píng)論 1 350
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡组民,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出悲靴,到底是詐尸還是另有隱情臭胜,我是刑警寧澤,帶...
    沈念sama閱讀 35,742評(píng)論 5 346
  • 正文 年R本政府宣布癞尚,位于F島的核電站耸三,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏浇揩。R本人自食惡果不足惜仪壮,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,364評(píng)論 3 330
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望胳徽。 院中可真熱鬧积锅,春花似錦、人聲如沸养盗。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,944評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽往核。三九已至箫爷,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間聂儒,已是汗流浹背蝶缀。 一陣腳步聲響...
    開封第一講書人閱讀 33,060評(píng)論 1 270
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留薄货,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 48,247評(píng)論 3 371
  • 正文 我出身青樓碍论,卻偏偏與公主長得像谅猾,于是被迫代替她去往敵國和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,979評(píng)論 2 355

推薦閱讀更多精彩內(nèi)容