1.如何巧妙隱藏一行 UITableViewCell
有些時(shí)候, 我們想動(dòng)態(tài)的隱藏某一行的UITableView里面某一行的Cell,一般我們會(huì)用到下面代碼去實(shí)現(xiàn)第三行Cell隱藏.
- (CGFloat) tableView:(UITableView *)tableView heightForRowAtIndexPath:
(NSIndexPath *)indexPath {
return indexPath.row == 3 ? 0 : 40;
}
但是很不幸的是, 我們有時(shí)候雖然把高度設(shè)置 0, 但是有時(shí)候Cell里面的Label的文字還是顯示, 還和其他Cell重疊.
解決方法
有很多方法去解決這個(gè)問(wèn)題, 只需要設(shè)置UITableViewDelegate里面添加下面代碼, 或者在你的繼承UITableViewCell的子類(lèi)里面把這個(gè)屬性設(shè)置YES.
- (void)tableView:(UITableView *)tableView willDisplayCell:(UITableViewCell *)cell forRowAtIndexPath:(NSIndexPath *)indexPath {
cell.clipsToBounds = YES;
}
2.關(guān)于UITableView設(shè)置成Plain格式, 禁止SectionView懸浮
UITableView的Plain風(fēng)格, 導(dǎo)致SectionTitle, SectionView懸浮在Navigation的下面, 不隨這TableView滑動(dòng)而滑動(dòng), 下面代碼解決懸浮問(wèn)題
- (void) scrollViewDidScroll:(UIScrollView *)scrollView {
CGFloat sectionHeaderHeight = 30;
BOOL isUpSectionScrollToNavigation = scrollView.contentOffset.y <= sectionHeaderHeight && scrollView.contentOffset.y >= 0;
BOOL isDownSectionScrollOutNavigation = scrollView.contentOffset.y >= sectionHeaderHeight;
if (isUpSectionScrollToNavigation) {
scrollView.contentInset = UIEdgeInsetsMake(-scrollView.contentOffset.y, 0, 0, 0);
}else if (isDownSectionScrollOutNavigation){
scrollView.contentInset = UIEdgeInsetsMake(-sectionHeaderHeight, 0, 0, 0);
}
}
3. 純代碼 UITableViewCell 應(yīng)該哪里初始化視圖
如果你使用的Cell是代碼+Nib. 那么你在自定義的Cell的時(shí)候你可以在awakeFromNib
添加
//Custom UITableViewCell
- (void) awakeFromNib {
....
//在這里你可以用代碼給Cell添加Label ImageView什么的. 該方法在Cell周期只會(huì)被執(zhí)行一次
....
}
// UITableView
void viewDidLoad {
..
[self.tableView registerNib:[UINib nibWithNibName:@"DownloadCell" bundle:nil] forCellReuseIdentifier:cellID];
..
}
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
DownloadCell *cell = [self.tableView dequeueReusableCellWithIdentifier:cellID forIndexPath:indexPath];
return cell
}
但是如果你使用的是純代碼構(gòu)建的UITableCell. 那么你就最好不要使用registerClass
方法. 因?yàn)閁ITableViewCell不會(huì)執(zhí)行awakeFromNib
. 那么你在哪里添加你自定義的控件呢?
//Custom UITableViewCell
-(instancetype)initWithStyle:(UITableViewCellStyle)style reuseIdentifier:(NSString *)reuseIdentifier {
self = [super initWithStyle:style reuseIdentifier:reuseIdentifier]
if (self) {
//在這里你可以用代碼給Cell添加Label ImageView什么的. 該方法在Cell周期只會(huì)被執(zhí)行一次
}
return self
}
// UITableView
void viewDidLoad {
..
// [self.tableView registerNib:[UINib nibWithNibName:@"DownloadCell" bundle:nil] forCellReuseIdentifier:cellID];
..
}
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
DownloadCell *cell = [self.tableView dequeueReusableCellWithIdentifier:cellID];
if (cell == nil) {
cell = [[DownloadCell alloc]initWithStyle:UITableViewCellStyleSubtitle reuseIdentifier:CellIdentifier];
}
return cell
}