[iOS] 日常

If a segue can be triggered only programmatically, you usually draw the connection arrow directly from the source view controller to the destination view controller.


NSObject 分配對(duì)象的類方法有 [+ alloc] 和 [+ allocWithZone:]赌蔑,alloc內(nèi)部其實(shí)調(diào)用的就是 [+ allocWithZone:]挽铁。并且在 Objective-c2.0 中 [+ allocWithZone:] 的參數(shù)zone會(huì)被忽略。[+ new] 方法是 [+ alloc] 方法和 [- init] 方法的結(jié)合,如果使用[[NSObject alloc] init]會(huì)讓代碼風(fēng)格更統(tǒng)一浅侨,直接使用[NSObject new]則使代碼更簡潔狞尔。


要區(qū)分設(shè)備方向和界面方向潘靖,設(shè)備方向是指物理設(shè)備的方向降淮,可以通過[UIDevice currentDevice].orientation獲得。而界面方向則是指應(yīng)用的界面支持哪些方向哲思,當(dāng)設(shè)備旋轉(zhuǎn)到某一方向時(shí)洼畅,若應(yīng)用界面支持這一方向,則應(yīng)用界面也會(huì)隨之旋轉(zhuǎn)變化棚赔。應(yīng)用支持的界面方向可以在項(xiàng)目的 target 中設(shè)置帝簇。另外我們可以在 Application Delegate 對(duì)象中實(shí)現(xiàn)方法 [- application:supportedInterfaceOrientationsForWindow:] 來覆蓋
target 中的設(shè)置。最后是View Controller級(jí)別的設(shè)置靠益,UIViewController 類中包含兩個(gè)方法 [- shouldAutorotate] 和
[- supportedInterfaceOrientations]己儒。只有當(dāng) [- shouldAutorotate] 方法返回 YES 時(shí),[- supportedInterfaceOrientations] 方法才會(huì)被調(diào)用捆毫。如果是iPad,supportedInterfaceOrientations方法默認(rèn)返回所有方向冲甘,如果是 iPhone绩卤,該方法則默認(rèn)返回除豎向反向外的其他方向。一個(gè)界面最終支持的方向是兩種級(jí)別支持方向的交集江醇。


通過 xib 文件指定 view controller 的 view 時(shí)濒憋,初始化 view controller 使用的方法是
[- initWithNibName:bundle:]。當(dāng)xib文件的名字與 view controller 的名字相同時(shí)陶夜,直接使用 [- init] 方法初始化 view controller 也可指定其
view 為 xib 文件中的 view凛驮。經(jīng)測(cè)試發(fā)現(xiàn)在調(diào)用 UIViewController 的
init 方法之前,self 的 nibName 屬性在有同名 xib 的情況下已賦值為該名稱条辟,之后 [- init] 方法會(huì)調(diào)用 [- initWithNibName:bundle:] 方法黔夭,但傳入的參數(shù)為 null宏胯,而 [- initWithNibName:bundle:] 方法在參數(shù)為
null 的情況下會(huì)去搜尋 nibName 屬性指定的xib文件加載,所以在有同名xib文件時(shí)本姥, [- init] 的方法也可加載到 xib 文件肩袍,但暫時(shí)沒有看到官方說明,所以即使是同名的xib文件婚惫,也最好用 [- initWithNibName:bundle:] 方法去加載 xib 文件初始化 view controller氛赐。


通過 Interface Builder 搭建的界面 xib 文件本質(zhì)上是 XML 文檔,它保存了界面上所有對(duì)象的信息和其之間的聯(lián)系先舷。編譯時(shí)艰管,xib 文件會(huì)被編譯成二進(jìn)制的 nib 文件(讀取xml文件,生成所有界面對(duì)象蒋川,調(diào)用 encodeWithCoder 序列化為二進(jìn)制 nib 文件)牲芋。運(yùn)行時(shí),反序列化尔破,調(diào)用所有對(duì)象的 initWithCoder街图,最后生成所有界面元素的實(shí)例,向?qū)嵗l(fā)送 awakeFromNib 消息懒构。所以餐济,所有控件都支持initWithCoder 和 encodeWithCoder 的 NSCoding 規(guī)范。如果直接通過 xml 文件解析生成實(shí)例對(duì)象應(yīng)該會(huì)影響性能胆剧。


通過 UITableView 和 UICollectionView 顯示數(shù)據(jù)時(shí)絮姆,當(dāng)數(shù)據(jù)變?yōu)榭諘r(shí),一般要顯示沒有數(shù)據(jù)的提示信息秩霍,隨著數(shù)據(jù)的改變篙悯,一般會(huì)伴隨著 reloadData 方法的調(diào)用或者 cell 的插入或刪除的方法的調(diào)用,而此時(shí)都會(huì)觸發(fā) delegate 的 numberOfRowsInSection 方法铃绒,將提示信息的顯示和隱藏的判斷放在這里不容易遺漏一些改變的情況鸽照。


iOS 通過設(shè)備可以獲取三類事件:Multitouch events,Accelerometer events颠悬,Remote control events矮燎。一個(gè)多點(diǎn)觸控序列表示從第一根手指的觸摸屏幕開始到最后一根手指的離開的過程。在這個(gè)過程中赔癌,一個(gè) UITouch 的對(duì)象代表一根手指在屏幕上的觸摸或者移動(dòng)诞外,并更新它的 phase,location in a view灾票,previous location等屬性峡谊,當(dāng)有新的
UITouch 對(duì)象或已有 UITouch 對(duì)象更新,UIApplication 對(duì)象會(huì)將
UITouch 對(duì)象傳給 key window 對(duì)象,之后 window 對(duì)象通過
hitTest:withEvent:(內(nèi)部調(diào)用pointInside:withEvent:)確定 touch 真正觸發(fā)的 view既们,如果有 gesture recognizer 附加在該view上濒析,
window 對(duì)象會(huì)先將touch對(duì)象先傳給gesture recognizer,然后
window 會(huì)根據(jù) gesture recognizer 的識(shí)別結(jié)果來決定是否發(fā)送消息給真正的觸發(fā)的view或者發(fā)送取消事件的消息贤壁,當(dāng)事件消息發(fā)送給view時(shí)悼枢,即可根據(jù) responder chain 來處理事件,通過 nextResponder 來傳遞脾拆。


偶然跑一個(gè)老的項(xiàng)目時(shí)發(fā)現(xiàn)馒索,由于該項(xiàng)目沒有對(duì)iPhone的4.7寸和5.5寸屏幕適配,所以當(dāng)應(yīng)用運(yùn)行在新尺寸的設(shè)備上時(shí)名船,系統(tǒng)會(huì)將應(yīng)用的界面整體放大到占滿整個(gè)屏幕(例如高度固定20點(diǎn)的status bar已明顯超過該值)绰上。若不想應(yīng)用按此方法展示,則可以:

  1. 在應(yīng)用的Target->General中設(shè)置Launch Screen File渠驼。當(dāng)將一個(gè).storyboard或.xib文件設(shè)置為Launch Screen File時(shí)蜈块,應(yīng)用在所有尺寸的iPhone上都會(huì)全屏顯示,并且不會(huì)整體的縮放迷扇。設(shè)置Launch Scrren File的作用就是可以通過一個(gè)文件百揭,對(duì)不同尺寸的設(shè)備以及在不同方向上適配不同的啟動(dòng)界面。
  2. 若通過在.xcassets中設(shè)置靜態(tài)圖片LaunchImage的方式蜓席,則可以加入對(duì)新尺寸圖片器一。之后應(yīng)用的效果也會(huì)變?yōu)槿溜@示,不會(huì)整體放大了厨内。

發(fā)現(xiàn)啟動(dòng)圖片的設(shè)置對(duì)應(yīng)用展示方式的影響后祈秕,做了一個(gè)不同情況的統(tǒng)計(jì)測(cè)試:

  1. 若不設(shè)置任何的啟動(dòng)資源(靜態(tài)圖片或文件),或者只設(shè)置了3.5寸屏的啟動(dòng)靜態(tài)圖片雏胃,此時(shí)的感覺像系統(tǒng)認(rèn)為所有界面針對(duì)3.5寸屏設(shè)備做展示请毛,在3.5寸上會(huì)全屏展示,各種bar的高度也肯定是默認(rèn)值瞭亮。若在4寸設(shè)備上運(yùn)行方仿,因?yàn)?.5寸屏與4寸屏寬相同,則在4寸設(shè)備上會(huì)按3.5寸屏的尺寸居中顯示统翩,上下會(huì)有黑邊仙蚜。4.7寸屏和5.5寸的寬高比與4寸相同,但寬度都大于4寸和3.5寸的320點(diǎn)寬唆缴,所以在這兩個(gè)設(shè)備上會(huì)按寬度等比放大然后居中顯示,同樣上下都會(huì)留有黑邊黍翎。
  2. 若設(shè)置了4寸屏的啟動(dòng)圖片面徽,則3.5寸和4寸屏都會(huì)全屏適配顯示,但4.7寸和5.5寸會(huì)按4寸等比放大顯示。
  3. 若設(shè)置了4.7寸或5.5寸屏的啟動(dòng)圖片或者使用啟動(dòng)屏幕文件的形式趟紊,則所有屏幕都會(huì)全屏適配顯示氮双。

暫時(shí)沒有找到官方的關(guān)于這方面的說明。


UIView 內(nèi)設(shè)置邊框?qū)挾?layer.borderWidth)向 view 內(nèi)延伸霎匈,不會(huì)占用 view 外部空間戴差。


在 Objective-C 中,協(xié)議可以繼承铛嘱,當(dāng)類聲明實(shí)現(xiàn)子協(xié)議時(shí)暖释,編譯器也會(huì)提示父協(xié)議中的方法。


測(cè)試 Demo 一般會(huì)創(chuàng)建新的工程墨吓,如果想測(cè)試應(yīng)用運(yùn)行在舊版本系統(tǒng)模擬器上的效果球匕,可能會(huì)在 Destination 的模擬器列表里看不到已添加的舊版本模擬器,這時(shí)要注意應(yīng)用的 Deployment Target 是否設(shè)置為支持所要測(cè)試的舊版本系統(tǒng)及以下帖烘。


通過 UIController 的 automaticallyAdjustsScrollViewInsets 屬性亮曹,可以設(shè)置系統(tǒng)是否調(diào)整 scroll view 以防止被 navigation bar 等遮擋。但是該屬性在 iOS11 中被廢棄秘症,代替的是 UIScrollView 的 contentInsetAdjustmentBehavior 屬性照卦。


當(dāng)界面上只有一個(gè) scroll view 時(shí),點(diǎn)擊狀態(tài)欄可以將其內(nèi)容滾動(dòng)回頂部乡摹。但如果同時(shí)存在多個(gè) scroll view 則該功能不起作用役耕,原因是這一行為受 scroll view 的屬性 scrollsToTop 的影響,iOS 系統(tǒng)只允許同時(shí)有一個(gè) scroll view 的該屬性為 YES趟卸,這時(shí)這一個(gè) scroll view 可以使用該功能蹄葱,當(dāng)有多個(gè) scroll view 的該屬性為 YES 時(shí),則都不起作用锄列。解決辦法就是根據(jù)需求動(dòng)態(tài)的修改 scroll view 的 scrollsToTop 屬性图云。


最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市邻邮,隨后出現(xiàn)的幾起案子竣况,更是在濱河造成了極大的恐慌,老刑警劉巖筒严,帶你破解...
    沈念sama閱讀 206,126評(píng)論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件丹泉,死亡現(xiàn)場離奇詭異,居然都是意外死亡鸭蛙,警方通過查閱死者的電腦和手機(jī)摹恨,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,254評(píng)論 2 382
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來娶视,“玉大人晒哄,你說我怎么就攤上這事睁宰。” “怎么了寝凌?”我有些...
    開封第一講書人閱讀 152,445評(píng)論 0 341
  • 文/不壞的土叔 我叫張陵柒傻,是天一觀的道長。 經(jīng)常有香客問我较木,道長红符,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 55,185評(píng)論 1 278
  • 正文 為了忘掉前任伐债,我火速辦了婚禮预侯,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘泳赋。我一直安慰自己雌桑,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,178評(píng)論 5 371
  • 文/花漫 我一把揭開白布祖今。 她就那樣靜靜地躺著校坑,像睡著了一般。 火紅的嫁衣襯著肌膚如雪千诬。 梳的紋絲不亂的頭發(fā)上耍目,一...
    開封第一講書人閱讀 48,970評(píng)論 1 284
  • 那天,我揣著相機(jī)與錄音徐绑,去河邊找鬼邪驮。 笑死,一個(gè)胖子當(dāng)著我的面吹牛傲茄,可吹牛的內(nèi)容都是我干的毅访。 我是一名探鬼主播,決...
    沈念sama閱讀 38,276評(píng)論 3 399
  • 文/蒼蘭香墨 我猛地睜開眼盘榨,長吁一口氣:“原來是場噩夢(mèng)啊……” “哼喻粹!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起草巡,我...
    開封第一講書人閱讀 36,927評(píng)論 0 259
  • 序言:老撾萬榮一對(duì)情侶失蹤守呜,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后山憨,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體查乒,經(jīng)...
    沈念sama閱讀 43,400評(píng)論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 35,883評(píng)論 2 323
  • 正文 我和宋清朗相戀三年郁竟,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了玛迄。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 37,997評(píng)論 1 333
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡棚亩,死狀恐怖蓖议,靈堂內(nèi)的尸體忽然破棺而出藻肄,到底是詐尸還是另有隱情,我是刑警寧澤拒担,帶...
    沈念sama閱讀 33,646評(píng)論 4 322
  • 正文 年R本政府宣布,位于F島的核電站攻询,受9級(jí)特大地震影響从撼,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜钧栖,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,213評(píng)論 3 307
  • 文/蒙蒙 一低零、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧拯杠,春花似錦掏婶、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,204評(píng)論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至依溯,卻和暖如春老厌,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背黎炉。 一陣腳步聲響...
    開封第一講書人閱讀 31,423評(píng)論 1 260
  • 我被黑心中介騙來泰國打工枝秤, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人慷嗜。 一個(gè)月前我還...
    沈念sama閱讀 45,423評(píng)論 2 352
  • 正文 我出身青樓淀弹,卻偏偏與公主長得像,于是被迫代替她去往敵國和親庆械。 傳聞我的和親對(duì)象是個(gè)殘疾皇子薇溃,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,722評(píng)論 2 345

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

  • *面試心聲:其實(shí)這些題本人都沒怎么背,但是在上海 兩周半 面了大約10家 收到差不多3個(gè)offer,總結(jié)起來就是把...
    Dove_iOS閱讀 27,124評(píng)論 29 470
  • 總結(jié)一些遇到的問題。日常工作中用到的一些方法總結(jié)干奢,有很簡單介紹痊焊,可能也有錯(cuò)誤,如果您看到了希望可以告訴我忿峻,會(huì)不間斷...
    最后還是個(gè)農(nóng)閱讀 1,635評(píng)論 4 7
  • 來個(gè)大整容 app在橫屏狀態(tài)下是不顯示iPhone的狀態(tài)欄的(就是有個(gè)小電池的那一欄)薄啥,除非你強(qiáng)制app這樣做。這...
    Billionfan閱讀 3,942評(píng)論 8 9
  • 隨著年齡漸大逛尚,內(nèi)心非常著急垄惧, 好好學(xué)習(xí)技術(shù), 好好掙錢绰寞,只能靠自己給自己買房子到逊,沒有什么理由不去好好努力铣口。而這最主...
    SOI閱讀 1,867評(píng)論 5 47
  • 一個(gè)人在最低谷的時(shí)候脑题,承受能力能有多強(qiáng)? 20歲之前铜靶,我從來都沒有考慮過這個(gè)問題叔遂。 20歲之后,我和我身邊的朋友或...
    Hy_seven閱讀 1,058評(píng)論 1 18