純代碼實(shí)現(xiàn)Facebook News Feed(1)

最終效果圖:

simulator

項(xiàng)目地址:github.com/Paganarchitect/facebook_newsFeed.git

第一部分搭建基本UI铡原,用到了UICollectionView和NSLayoutConstraint的知識眷蜈∽萌澹看下這部分完成后:

simulator

#1 搭建基本框架忌怎,注冊cell酪夷,設(shè)置collectionView數(shù)據(jù)源和代理

simulator

1.刪掉storyboard晚岭,并把刪掉Main Interface里的main坦报。將ViewController改名為FeedController片择,subclass of UICollectionViewController。

Deployment Info
FeedController.swift

2.搭建基本框架信不。需說明的是亡呵,UICollectionViewFlowLayout是UICollectionViewLayout的默認(rèn)形式政己。

AppDelegate.swift

3.設(shè)定navigation bar歇由,navigation bar titleText及UICollectionView的顏色沦泌。

--繼續(xù)在AppDelegate.swift里,添加代碼,設(shè)置navigation bar和bar title text的顏色释牺。

AppDelegate.swift

--在FeedController.swift里没咙,將bar title text設(shè)置為“Facebook News Feed”祭刚,collectionView的背景顏色設(shè)置為淺灰墙牌。

FeedController.swift

運(yùn)行一下喜滨,現(xiàn)在status bar的顏色還是黑色虽风。想要把它也變成和navigationbartitle的顏色一樣辜膝,怎么辦?

simulator

--在Info.plist里内舟,添加一個property--status bar based on view controller appearance,將這個布爾值設(shè)為No充岛,這意味著application對status bar的設(shè)置高于view controller對status bar的設(shè)置崔梗。運(yùn)行一下蒜魄,status bar的顏色也變成了白色,哈哈旅挤。

Info.plist
simulator

4.注冊collectionViewCell

--新建文件命名為FeedCell

FeedCell.swift

--回到FeedViewController.swift中,

FeedViewController.swift

5.添加數(shù)據(jù)源和代理方法,并設(shè)置垂直方向的反彈為YES

數(shù)據(jù)源和代理方法
在ViewDidLoad()里進(jìn)行設(shè)置

#2 添加nameLabel和profileImageView

1.添加nameLabel和profileImageView并加約束.需要說明的是translatesAuthoresizingMaskIntoConstraints屬性默認(rèn)是True,這里我們設(shè)置為NO芙贫,不添加隱含constraint磺平,這樣才能讓手動添加的constraint起作用怔檩。

FeedCell.swift

當(dāng)然薛训,也可以添加一個方法乙埃,使得代碼看起來更簡潔锯岖!這個方法有兩個參數(shù)出吹,format和views;先聲明一個字典鸠珠;再對views進(jìn)行遍歷渐排。

FeedCell.swift

運(yùn)行一下驯耻,現(xiàn)在是這樣的

simulator

2.填充圖片,拖圖片進(jìn)來,并添加代碼

FeedCell.swift

3.修改label可缚。這里城看,需要解釋以下兩點(diǎn):

--關(guān)于numberOfLines:label默認(rèn)只顯示一行测柠,通過設(shè)置numberOfLines可以改變行數(shù)。但是如果設(shè)置為0谒主,則告訴文本不管占多少行霎肯,都顯示出來榛斯。

--關(guān)于NSAttributedString富文本字符串驮俗。使用場景:設(shè)置文字樣式和設(shè)置段落樣式√赂蹋可以分為NSAttributedString和NSMutableAttributedString兩種工碾。在使用中通過將AttributedString賦值給控件的attributedText屬性來添加文字樣式百姓。有屬性的控件有UILabel、UITextField和UITextView焦读。

FeedCell.swift

#3 添加feedTextView,feedImageView和likeCommentsLabel矗晃,和dividerLineView

1.在FeedController.swift里宴倍,將cell的高度改為450鸵贬;接著阔逼,修改nameLabel的約束嗜浮,與superview的垂直間距為8 points

FeedCell.swift
simulator

2.添加feedTextView危融,并加約束

FeedCell.swift

3.添加feedImageView,并加約束吉殃。這里解釋一下masksToBounds屬性蛋勺,它用來防止子元素大小溢出父元素。因?yàn)樯厦嫖覀兊腸ontentMode設(shè)置成的是scaleAspectFill贼陶,所以這里需要將maskToBounds屬性設(shè)置為true每界,防止圖片溢出家卖。

FeedCell.swift

4.添加likeCommentsLabel上荡,dividerLineView酪捡。太簡單逛薇,不細(xì)說。

運(yùn)行一下啤呼,現(xiàn)在是這樣的官扣!

simulator

#4 添加button

likeButton

因?yàn)檫@三個button構(gòu)造基本一樣惕蹄,偷個懶卖陵,起一個與這段代碼功能相對應(yīng)的名字赶促,封裝成一個新的方法挟炬。聲明類的類型方法(Type Methods),在方法的關(guān)鍵字func前加上關(guān)鍵字class谤祖。

Type Methods

注意button的水平約束粥喜,每個button的寬度占superview寬度的1/3额湘。但是VFL不能實(shí)現(xiàn)multiplier怎么辦?可以讓likeButton嗡官,commentButton的寬度是shareButton的寬度衍腥。

constraints

運(yùn)行一下婆咸,現(xiàn)在是這樣的:

simulator

#5 處理橫屏布局

手動調(diào)用invalidateLayout方法以更新布局對象尚骄,此方法會強(qiáng)制生成新layout倔丈。(需要注意invalidateLayout與reloadData的區(qū)別,在移動起趾,添加或者刪除item的時候训裆,使用invalidateLayout蜀铲,而如果只是datasource中的數(shù)據(jù)有更新记劝,這時需要使用reloadData

FeedViewController.swift
橫屏

第一部分結(jié)束厌丑。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末定欧,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子怒竿,更是在濱河造成了極大的恐慌砍鸠,老刑警劉巖,帶你破解...
    沈念sama閱讀 218,858評論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件耕驰,死亡現(xiàn)場離奇詭異爷辱,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)朦肘,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,372評論 3 395
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來媒抠,“玉大人弟断,你說我怎么就攤上這事×旖ⅲ” “怎么了夫嗓?”我有些...
    開封第一講書人閱讀 165,282評論 0 356
  • 文/不壞的土叔 我叫張陵,是天一觀的道長冲秽。 經(jīng)常有香客問我舍咖,道長,這世上最難降的妖魔是什么锉桑? 我笑而不...
    開封第一講書人閱讀 58,842評論 1 295
  • 正文 為了忘掉前任排霉,我火速辦了婚禮,結(jié)果婚禮上民轴,老公的妹妹穿的比我還像新娘攻柠。我一直安慰自己,他們只是感情好后裸,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,857評論 6 392
  • 文/花漫 我一把揭開白布瑰钮。 她就那樣靜靜地躺著,像睡著了一般微驶。 火紅的嫁衣襯著肌膚如雪浪谴。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,679評論 1 305
  • 那天因苹,我揣著相機(jī)與錄音苟耻,去河邊找鬼。 笑死扶檐,一個胖子當(dāng)著我的面吹牛凶杖,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播款筑,決...
    沈念sama閱讀 40,406評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼智蝠,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了奈梳?” 一聲冷哼從身側(cè)響起寻咒,我...
    開封第一講書人閱讀 39,311評論 0 276
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎颈嚼,沒想到半個月后毛秘,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,767評論 1 315
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡阻课,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,945評論 3 336
  • 正文 我和宋清朗相戀三年叫挟,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片限煞。...
    茶點(diǎn)故事閱讀 40,090評論 1 350
  • 序言:一個原本活蹦亂跳的男人離奇死亡抹恳,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出署驻,到底是詐尸還是另有隱情奋献,我是刑警寧澤健霹,帶...
    沈念sama閱讀 35,785評論 5 346
  • 正文 年R本政府宣布,位于F島的核電站瓶蚂,受9級特大地震影響糖埋,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜窃这,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,420評論 3 331
  • 文/蒙蒙 一瞳别、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧杭攻,春花似錦祟敛、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,988評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至锅睛,卻和暖如春叼架,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背衣撬。 一陣腳步聲響...
    開封第一講書人閱讀 33,101評論 1 271
  • 我被黑心中介騙來泰國打工乖订, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人具练。 一個月前我還...
    沈念sama閱讀 48,298評論 3 372
  • 正文 我出身青樓乍构,卻偏偏與公主長得像,于是被迫代替她去往敵國和親扛点。 傳聞我的和親對象是個殘疾皇子哥遮,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,033評論 2 355

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

  • 發(fā)現(xiàn) 關(guān)注 消息 iOS 第三方庫、插件陵究、知名博客總結(jié) 作者大灰狼的小綿羊哥哥關(guān)注 2017.06.26 09:4...
    肇東周閱讀 12,105評論 4 62
  • 抓不住概念眠饮,就是說,意識不到那是個概念铜邮,隨便給個譯法仪召,不給原文,叫我怎么說你好松蒜? ——又扔茅,連廊下派是個“教派”還是...
    Gottfried閱讀 70評論 0 1
  • 我相信世上是有鬼神之說的 ,雖然這種“鬼壓床”的現(xiàn)象秸苗,已經(jīng)有了詳細(xì)的科學(xué)解釋召娜,但“鬼壓床”這種事我還是想把...
    本宮來看看閱讀 3,444評論 0 6
  • 朋友送來一盒倫勃朗彩鉛,迫不及待地打開惊楼,試著用新彩鉛畫幅畫玖瘸。說畫就畫秸讹。 鉛筆畫稿,在用彩鉛描稿雅倒,擦去鉛筆印璃诀。這次我...
    格Y調(diào)閱讀 1,233評論 10 37