第一個section上邊多餘間距處理 每個section下邊多餘間距處理 備註:若傳入的 height == 0,則 height 被設置成預設值 若 height 小於屏幕半像素對應的高度,則不會被渲染,所以這裡返回CGFLOAT_MIN,其實返回0.01也是可以的 補充:代碼順序的不同導致第一個 ...
第一個section上邊多餘間距處理
// 隱藏UITableViewStyleGrouped上邊多餘的間隔
_tableView.tableHeaderView = [[UIView alloc] initWithFrame:CGRectMake(0, 0, 0, CGFLOAT_MIN)];
每個section下邊多餘間距處理
// 隱藏UITableViewStyleGrouped下邊多餘的間隔
- (CGFloat)tableView:(UITableView *)tableView heightForFooterInSection:(NSInteger)section {
return CGFLOAT_MIN;
}
- 備註:若傳入的 height == 0,則 height 被設置成預設值
- 若 height 小於屏幕半像素對應的高度,則不會被渲染,所以這裡返回CGFLOAT_MIN,其實返回0.01也是可以的
補充:代碼順序的不同導致第一個section上邊出現多餘間距
- 在設置代理
前
設置tableFooterView,上邊會出現
多餘間距
tableView = [[UITableView alloc]initWithFrame:CGRectZero style:UITableViewStyleGrouped];
tableView.tableFooterView = [UIView new];
tableView.delegate = self;
tableView.dataSource = self;
- 在設置代理
後
設置tableFooterView,上邊不會出現
多餘間距
tableView = [[UITableView alloc]initWithFrame:CGRectZero style:UITableViewStyleGrouped];
tableView.delegate = self;
tableView.dataSource = self;
tableView.tableFooterView = [UIView new];
- 可以通過
第一個section上邊多餘間距處理
的辦法來解決因代碼順序導致的上述問題,所以這裡建議要解決第一個section上邊多餘間距
還是通過文章開頭所說的解決辦法更好
在 Storyboard 中 0 代碼搞定
沒用 Storyboard 的同學使用上面的代碼就 OK 了; 而在 Storyboard 中可以 0 代碼搞定這個事:
首先,在第一個 Section 的上面拖進來一個空 UIView
然後選中這個 UIView 的 Runtime Attributes 欄,添加一個 frame
的 KeyPath
這樣頭部的間隔就乖乖的不見了:
刨根問底 UITableViewHeader 的貓膩
為什麼剛纔說 0.1 和 CGFLOAT_MIN 是等效的呢?經過研究,這個高度值的影響大概是這樣的:
- 若傳入的 height == 0,則 height 被設置成預設值
- 若 height 小於屏幕半像素對應的高度,這個 header 不在另一個像素渲染
半像素也就是 1.0 / scale / 2.0
,如在 @2x 屏上是 0.25
直觀的感受下,假如這個 height 被設置成 0.5 的樣子:
導航欄下麵的陰影線看上去寬了 0.5 像素的,Done。
參考文章