詳解iOS開發(fā)中UITableview cell 頂部空白的多種設(shè)置方法

本篇文章來源于網(wǎng)絡(luò)养铸,我想找到出處,但是轉(zhuǎn)的太多轧膘,也不知道原創(chuàng)者在哪里有寫钞螟。因為網(wǎng)絡(luò)上的排版,等問題谎碍,我重新轉(zhuǎn)載此處鳞滨。非原創(chuàng),碰到了所以在這里記下蟆淀。多傳作者heiline拯啦,來自豆豆網(wǎng)澡匪。

前言

這篇文章主要介紹了詳解iOS開發(fā)中UITableview cell 頂部空白的多種設(shè)置方法的相關(guān)資料,大多沒人會主動設(shè)置這個,但是有很大幾率會遇到過這個問題褒链,下面總結(jié)下可能是哪些情況:

1唁情, self.automaticallyAdjustsScrollViewInsets = NO;

這個應(yīng)該是最常見而且不容易被發(fā)現(xiàn)的原因,起因是iOS7在Conttoller中新增了automaticallyAdjustsScrollViewInsets這個屬性甫匹,當(dāng)設(shè)置為YES時(默認YES)甸鸟,如果視圖里面存在唯一一個UIScrollView或其子類View,那么它會自動設(shè)置相應(yīng)的內(nèi)邊距兵迅,這樣可以讓scroll占據(jù)整個視圖抢韭,又不會讓導(dǎo)航欄遮蓋。
  PS:iOS7里面的布局問題挺多的喷兼,使用autolayout的時候會遇到好多篮绰,大概是因為iOS7新加入autolayout還還不成熟導(dǎo)致的吧。

2季惯,navigationbar設(shè)置問題

雖然表面上看是tableview頂部有空白吠各,但實際上可能是因為navigationbar設(shè)置問題導(dǎo)致。
   self.navigationController.navigationBar.translucent = NO; 這個屬性設(shè)為no之后勉抓,tableview會在上方留出64.f的位置給navigationbar贾漏,也有小概率導(dǎo)致這個問題。

3藕筋,tableview section header高度設(shè)置問題

這個應(yīng)該是新手遇到的比較多的纵散。起因是iOS奇葩的邏輯,如果你設(shè)置header(或者footer)高度是0的話隐圾,系統(tǒng)會認為你沒設(shè)置伍掀,然后將其設(shè)置為40.f。所以需要將其設(shè)置為一個較小的數(shù):

- (CGFloat)tableView:(UITableView *)tableView heightForHeaderInSection:(NSInteger)section {
return 0.001f;
}
4暇藏,tableview的header蜜笤、footer設(shè)置問題

和3很像是不是?沒發(fā)現(xiàn)區(qū)別嗎盐碱?那就再讀一次看看把兔。這次是tableview的header視圖引起的,而不是section的header高度引起瓮顽。
  對于tableview县好,不僅每個section有header,tableview整體也有header和footer暖混,API如下:

@property (nonatomic, strong, nullable) UIView *tableHeaderView; // accessory view for above row content. default is nil. not to be confused with section header
@property (nonatomic, strong, nullable) UIView *tableFooterView; // accessory view below content. default is nil. not to be confused with section footer

這個header和footer要比section的header要和諧一些缕贡,只要你不去主動碰它就沒事,但是如果你碰了...哼,哼...基本上會被設(shè)置出40.f高的間距晾咪。出現(xiàn)如下任意一行代碼均會引起這個問題:

self.tableView.tableHeaderView = nil; 
 self.tableView.tableHeaderView = [[UIView alloc] init]; 
 self.tableView.tableHeaderView = [[UIView alloc] initWithFrame:CGRectZero]; 
 self.tableView.tableFooterView = nil; 
 self.tableView.tableFooterView = [[UIView alloc] init]; 
 self.tableView.tableFooterView = [[UIView alloc] initWithFrame:CGRectZero];

對黔漂,你沒想錯,footerView也不能設(shè)置禀酱,footer和header只要設(shè)置了任意一個都會使兩個地方都出現(xiàn)空白炬守。不要問我為什么...
  當(dāng)然,如果有的時候真的只需要其中一個view的話該怎么辦呢剂跟?請如下設(shè)置:(似不似傻减途,自己建一個view唄,非得用著惡心的東西么...)

self.tableView.tableHeaderView = [[UIView alloc] initWithFrame:CGRectMake(0, 0, kScreenSize.width, 0.0001f)];
self.tableView.tableFooterView = [[UIView alloc] initWithFrame:CGRectMake(0, 0, kScreenSize.width, 0.0001f)];

說白了曹洽,還是得設(shè)置成一個很小的高度鳍置,而不是0才行。
  關(guān)于tableView頂部空白的總結(jié)基本就這些了送淆,如果想屏蔽的話税产,建議把這些寫在baseTableViewController里面,這樣就不用每次都扣這些東西了偷崩。宏懶得粘了辟拷,都是常見的,大家應(yīng)該都能看懂阐斜。navigationbar那個衫冻,因為這個東西一般不在這里設(shè)置,寫在base里面不是一個好的做法谒出。

//
// HLNBaseTableViewController.m
// HLN-IMDemo
//
// Created by heiline on 15/8/25.
// Copyright (c) 2015年 baidu. All rights reserved.
//
#import "HLNBaseTableViewController.h"
@interface HLNBaseTableViewController () 
@end
@implementation HLNBaseTableViewController
- (void)viewDidLoad {
[super viewDidLoad];
self.tableView = [[UITableView alloc] initWithFrame:(CGRect){CGPointZero, kScreenSize} style:_tableViewStyle];
[self.view addSubview:self.tableView];
self.tableView.tableHeaderView = [[UIView alloc] initWithFrame:CGRectMake(0, 0, kScreenSize.width, 0.0001f)];
self.tableView.tableFooterView = [[UIView alloc] initWithFrame:CGRectMake(0, 0, kScreenSize.width, 0.0001f)];
if (self.navigationController != nil) {
self.tableView.height -= kNavBarH + kStatusBarH;
}
if (self.tabBarController != nil) {
if (self.navigationController.childViewControllers.count == 1) {
self.tableView.height -= kTabBarH;
}
}
self.tableView.delegate = self;
self.tableView.dataSource = self;
self.automaticallyAdjustsScrollViewInsets = NO;
}
- (void)dealloc {
self.tableView.dataSource = nil;
self.tableView.delegate = nil;
}
#pragma mark Table View Data Source And delegate Methods
-(NSInteger)numberOfSectionsInTableView:(UITableView *)tableView {
return 0;
}
-(NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section {
return 0;
}
-(UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
return [[UITableViewCell alloc] init];
}
-(void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {
}
- (UIView *)tableView:(UITableView *)tableView viewForFooterInSection:(NSInteger)section {
return nil;
}
- (UIView *)tableView:(UITableView *)tableView viewForHeaderInSection:(NSInteger)section {
return nil;
}
- (CGFloat)tableView:(UITableView *)tableView heightForHeaderInSection:(NSInteger)section {
return 0.001f;
}
- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath {
return 40.f;
}
-(CGFloat)tableView:(UITableView *)tableView heightForFooterInSection:(NSInteger)section {
return 0.001f;
}
@end
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末隅俘,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子笤喳,更是在濱河造成了極大的恐慌为居,老刑警劉巖,帶你破解...
    沈念sama閱讀 212,383評論 6 493
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件杀狡,死亡現(xiàn)場離奇詭異蒙畴,居然都是意外死亡,警方通過查閱死者的電腦和手機捣卤,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,522評論 3 385
  • 文/潘曉璐 我一進店門忍抽,熙熙樓的掌柜王于貴愁眉苦臉地迎上來八孝,“玉大人董朝,你說我怎么就攤上這事「甚耍” “怎么了子姜?”我有些...
    開封第一講書人閱讀 157,852評論 0 348
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經(jīng)常有香客問我哥捕,道長牧抽,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 56,621評論 1 284
  • 正文 為了忘掉前任遥赚,我火速辦了婚禮扬舒,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘凫佛。我一直安慰自己讲坎,他們只是感情好,可當(dāng)我...
    茶點故事閱讀 65,741評論 6 386
  • 文/花漫 我一把揭開白布愧薛。 她就那樣靜靜地躺著晨炕,像睡著了一般。 火紅的嫁衣襯著肌膚如雪毫炉。 梳的紋絲不亂的頭發(fā)上瓮栗,一...
    開封第一講書人閱讀 49,929評論 1 290
  • 那天,我揣著相機與錄音瞄勾,去河邊找鬼费奸。 笑死,一個胖子當(dāng)著我的面吹牛进陡,可吹牛的內(nèi)容都是我干的货邓。 我是一名探鬼主播,決...
    沈念sama閱讀 39,076評論 3 410
  • 文/蒼蘭香墨 我猛地睜開眼四濒,長吁一口氣:“原來是場噩夢啊……” “哼换况!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起盗蟆,我...
    開封第一講書人閱讀 37,803評論 0 268
  • 序言:老撾萬榮一對情侶失蹤戈二,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后喳资,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體觉吭,經(jīng)...
    沈念sama閱讀 44,265評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,582評論 2 327
  • 正文 我和宋清朗相戀三年仆邓,在試婚紗的時候發(fā)現(xiàn)自己被綠了鲜滩。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 38,716評論 1 341
  • 序言:一個原本活蹦亂跳的男人離奇死亡节值,死狀恐怖徙硅,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情搞疗,我是刑警寧澤嗓蘑,帶...
    沈念sama閱讀 34,395評論 4 333
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響桩皿,放射性物質(zhì)發(fā)生泄漏豌汇。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 40,039評論 3 316
  • 文/蒙蒙 一泄隔、第九天 我趴在偏房一處隱蔽的房頂上張望拒贱。 院中可真熱鬧,春花似錦佛嬉、人聲如沸柜思。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,798評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽赡盘。三九已至,卻和暖如春缰揪,著一層夾襖步出監(jiān)牢的瞬間陨享,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,027評論 1 266
  • 我被黑心中介騙來泰國打工钝腺, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留抛姑,地道東北人。 一個月前我還...
    沈念sama閱讀 46,488評論 2 361
  • 正文 我出身青樓艳狐,卻偏偏與公主長得像定硝,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子毫目,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 43,612評論 2 350

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

  • 1.badgeVaule氣泡提示 2.git終端命令方法> pwd查看全部 >cd>ls >之后桌面找到文件夾內(nèi)容...
    i得深刻方得S閱讀 4,642評論 1 9
  • 自己到現(xiàn)在畢業(yè)一年蔬啡,總結(jié)了自己在前段時間開發(fā)當(dāng)中遇到的的一些細節(jié)問題,水平有限镀虐,希望有可以幫助大家的 1箱蟆,在OC中...
    baixuancheng閱讀 648評論 0 1
  • 昨天跑了一天,晚上腿疼死了刮便,不過值得空猜。上午去卸瓷磚,好熱啊恨旱。下午兩點去法院告知沒有身份信息不行辈毯,就給錢叫律師幫忙調(diào)...
    努力活成個笑話閱讀 148評論 0 0
  • 昨天晚上本來打算一熄燈就睡覺的,確實是也這樣做了搜贤,但是讓我搓火的是那只守了我一夏天的蚊子谆沃,我敢大保證絕對沒有換,就...
    愛吃甜食也愛你閱讀 199評論 0 1