UI技巧—iOS實現TableViewCell部分遮擋header效果

效果如下

image

分析

1、由于第一個cell和header有疊加效果,但是cell單獨設置clipsToBounds為NO并不能達到效果,所以這種方案行不通;

self.contentView.clipsToBounds = NO;

2、考慮到還要兼容header下拉放大的效果,所以將背景圖和第一個cell作為單獨的header能夠實現效果,但需要單獨處理數據源,將列表中的第一條取出來填充到header里面,有點麻煩但能達到效果;

image

3、最后說說我實現的方式:

/// 需要遮罩header部分的高度
static NSInteger kNeedMaskHeaderHeight = 60;
/// 需要占位假header的高度
static NSInteger kFakeHeaderHeight = 180;


// 1.創建一個空白且透明的header,用來占位
UIView *fakeHeader = [[UIView alloc] initWithFrame:CGRectMake(0, 0, [UIScreen mainScreen].bounds.size.width, kFakeHeaderHeight)];
fakeHeader.backgroundColor = UIColor.clearColor;
self.tableView.tableHeaderView = fakeHeader;
[self.tableView reloadData];

// 2.將真正的header添加到tableView上面
[self.tableView addSubview:self.headerView];
[self.headerView mas_makeConstraints:^(MASConstraintMaker *make) {
    make.top.equalTo(self.tableView);
    make.width.equalTo(self.tableView);
    make.height.equalTo(@(kFakeHeaderHeight + kNeedMaskHeaderHeight));
}];
// 3.移除透明的空白占位header,否則會阻擋交互
[self.tableView.tableHeaderView removeFromSuperview];
- (void)tableView:(UITableView *)tableView willDisplayCell:(UITableViewCell *)cell forRowAtIndexPath:(NSIndexPath *)indexPath {
    // 4.將真正的header置于tableView視圖層級最底下
    [self.tableView sendSubviewToBack:self.headerView];
}

Demo鏈接


總結

積極總結UI技巧,能夠幫助我們快速完成業務。

?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容

  • 其實我很擔心爸爸的身體,他常年頭疼,身材瘦弱,剛過半百,卻蒼老的比其他同齡人多許多。想讓他戒酒,他卻總是做不到。想...
    秋橋Stacy閱讀 277評論 0 1
  • 對不起,我錯了,我不應該使用語言暴力! 這兩天很幸運的又獲得了一個提升自己、精進自己的機會。 這次的課程是關于傳統...
    武穎慧閱讀 249評論 0 0
  • 驀然回首 細數這些年來的光陰 就這樣平平淡淡 一路走來 期間 有追求也有放棄 有喜悅也有憂傷 也曾迷惘 也曾徘徊 ...
    歲月何匆匆匆閱讀 5,089評論 72 298
  • http://www.lxweimin.com/p/27ec6375b8ab
    yhj0129閱讀 247評論 0 0