實現(xiàn)諸如支付寶的 “探索” 頁面時虚汛,最簡單的方案是在 Storyboard 中來一個靜態(tài) Grouped UITableViewController袄琳,把各個 Cell 中的元素擺好就行了
不過會有下面的問題边锁,第一個 Section 距離屏幕頂端有間隔
一行代碼搞定
研究發(fā)現(xiàn)温自,這里其實是一個被 UITableView 默認(rèn)填充的 HeaderView吃既。而且斧蜕,當(dāng)試圖將它的高度設(shè)置為 0 時,完全不起效果蛇数。但我們用下面的代碼創(chuàng)建一個高度特別小的 HeaderView 時挪钓,上面的邊距就不見了:
CGFLOAT_MIN 這個宏表示 CGFloat 能代表的最接近 0 的浮點數(shù),64 位下大概是 0.00(300左右個)0225 這個樣子
這樣寫單純的為了避免一個魔法數(shù)字苞慢,這里用 0.1 效果是一樣的诵原,后面再講。
在 Storyboard 中 0 代碼搞定
沒用 Storyboard 的同學(xué)使用上面的代碼就 OK 了; 而在 Storyboard 中可以 0 代碼搞定這個事:
首先绍赛,在第一個 Section 的上面拖進(jìn)來一個空 UIView
然后選中這個 UIView 的 Runtime Attributes 欄蔓纠,添加一個 frame 的 KeyPath
這樣頭部的間隔就乖乖的不見了:
刨根問底 UITableViewHeader 的貓膩
為什么剛才說 0.1 和 CGFLOAT_MIN 是等效的呢?經(jīng)過研究吗蚌,這個高度值的影響大概是這樣的:
若傳入的 height == 0腿倚,則 height 被設(shè)置成默認(rèn)值
若 height 小于屏幕半像素對應(yīng)的高度,這個 header 不在另一個像素渲染
半像素也就是 1.0 / scale / 2.0蚯妇,如在 @2x 屏上是 0.25
直觀的感受下敷燎,假如這個 height 被設(shè)置成 0.5 的樣子:
身患強(qiáng)迫癥的我是絕對不能容忍導(dǎo)航欄下面的陰影線看上去寬了 0.5 像素的,Done箩言。