你好,歡迎來到IOS教程網

 Ios教程網 >> IOS編程開發 >> IOS開發綜合 >> 詳解iOS開辟中UITableview cell 頂部空白的多種設置辦法

詳解iOS開辟中UITableview cell 頂部空白的多種設置辦法

編輯:IOS開發綜合

我曉得沒人會自動設置這個器械,然則年夜家必定都碰到過這個成績,上面總結下能夠是哪些情形:

  1, self.automaticallyAdjustsScrollVieWinsets = NO;

  這個應當是最多見並且不輕易被發明的緣由,原由是IOS7在Conttoller中新增了automaticallyAdjustsScrollVieWinsets這個屬性,當設置為YES時(默許YES),假如視圖外面存在獨一一個UIScrollView或其子類View,那末它會主動設置響應的內邊距,如許可讓scroll占領全部視圖,又不會讓導航欄隱瞞。

  PS:IOS7外面的結構成績挺多的,應用autolayout的時刻會碰到很多多少,年夜概是由於IOS7新參加autolayout還還不成熟招致的吧。

  2,navigationbar設置成績

  固然外面上看是tableview頂部有空白,但現實上能夠是由於navigationbar設置成績招致。

   self.navigationController.navigationBar.translucent = NO; 這個屬性設為no以後,tableview會在上方留出64.f的地位給navigationbar,也有小幾率招致這個成績。

  3,tableview section header高度設置成績

  這個應當是老手碰到的比擬多的。原由是iOS奇葩的邏輯,假如你設置header(或許footer)高度是0的話,體系會以為你沒設置,然後將其設置為40.f。所以須要將其設置為一個較小的數:

- (CGFloat)tableView:(UITableView *)tableView heightForHeaderInSection:(NSInteger)section {
return 0.001f;
} 

  4,tableview的header、footer設置成績

  和3很像是否是?沒發明差別嗎?那就再讀一次看看。此次是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要協調一些,只需你不去自動碰它就沒事,然則假如你碰了...哼,哼...根本上會被設置出40.f高的間距。湧現以下隨意率性一行代碼均會惹起這個成績:

  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也不克不及設置,footer和header只需設置了隨意率性一個都邑使兩個處所都湧現空白。不要問我為何...

  固然,假如有的時刻真的只須要個中一個view的話該怎樣辦呢?請以下設置:(似不似傻,本身建一個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)]; 

  說白了,照樣得設置成一個很小的高度,而不是0才行。

  關於tableView頂部空白的總結根本就這些了,假如想屏障的話,建議把這些寫在baseTableViewController外面,如許就不消每次都扣這些器械了。宏懶得粘了,都是罕見的,年夜家應當都能看懂。navigationbar誰人,由於這個器械普通不在這裡設置,寫在base外面不是一個好的做法。

//
// HLNBaseTableViewController.m
// HLN-IMDemo
//
// Created by heiline on 15/8/25.
// Copyright (c) 2015年 百度. 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

【詳解iOS開辟中UITableview cell 頂部空白的多種設置辦法】的相關資料介紹到這裡,希望對您有所幫助! 提示:不會對讀者因本文所帶來的任何損失負責。如果您支持就請把本站添加至收藏夾哦!

  1. 上一頁:
  2. 下一頁:
蘋果刷機越獄教程| IOS教程問題解答| IOS技巧綜合| IOS7技巧| IOS8教程
Copyright © Ios教程網 All Rights Reserved