UITableView viewForHeaderInSection UITableView内容插入问题

时间:2018-03-14 16:42:41

标签: ios uitableview uiscrollview uitableviewsectionheader uiedgeinsets

我正在使用UITableView。 表视图有一个带有UIImageView的HeaderView,当用户滚动表视图时,它会改变它的高度。

除此之外,我还有一个自定义uiview用于tableview的部分..我的问题是在为tableview设置内容Inset之后,该部分不跟随表的滚动..

滚动前

enter image description here

滚动后

enter image description here

肯定是内容问题,我做了各种测试,但我找不到解决方案......

我希望tableView的部分跟随滚动并在状态栏下停止(大约25点self.view.frame.origin.y)

我应该遵循哪条路来解决我的问题?

这是我正在使用的代码

注册Xib以获取部分标题

- (void)viewDidLoad {
    [super viewDidLoad];

    _tableView.delegate =  self;
    _tableView.dataSource = self;
    _tableView.separatorStyle = UITableViewCellSeparatorStyleSingleLine;

    [_tableView registerClass:[UITableViewCell class] forCellReuseIdentifier:cellID];

    [_tableView registerNib:[UINib nibWithNibName:@"DashboardTopHeader" bundle:nil] forHeaderFooterViewReuseIdentifier:dashboardTopHeader];

    [self setupHeaderView];
}

生成章节标题

#pragma mark - Dashboard Top Header
-(UIView *)tableView:(UITableView *)tableView viewForHeaderInSection:(NSInteger)section {
    DashboardTopHeader *header = [tableView dequeueReusableHeaderFooterViewWithIdentifier:dashboardTopHeader];
    return header;
}

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

使用照片设置TableView的标题视图

-(void)setupHeaderView {
    _headerView = [[UIView alloc] init];
    _headerView = self.tableView.tableHeaderView;
    _tableView.tableHeaderView = nil;
    [_tableView addSubview:_headerView];

    // 130 is Height of headerView
    CGFloat newHeight = 130 - 50 /2; 

    _tableView.contentOffset = CGPointMake(0, -newHeight);
    _tableView.contentInset = UIEdgeInsetsMake(newHeight, 0, 0, 0 );

    [self updateHeaderView];
}

-(void)updateHeaderView {
    CGFloat newHeight = 130 - 50 /2;
    CGRect headerFrame = CGRectMake(0, -newHeight, self.tableView.frame.size.width, 130);

    if (self.tableView.contentOffset.y < newHeight) {
        headerFrame.origin.y = self.tableView.contentOffset.y;
        headerFrame.size.height = - self.tableView.contentOffset.y + 50/2;
    }

    _headerView.frame = headerFrame;
}

使用TableView代理滚动内容

-(void)scrollViewDidScroll:(UIScrollView *)scrollView {
    [self updateHeaderView];
}

0 个答案:

没有答案