UITableView滚动问题在我的表标题不滚动的iOS上滚动

时间:2015-12-07 22:06:00

标签: ios objective-c uitableview

以下是我UIView的细分:

  • UIView位于顶部。我正在使用它作为容器视图,其中包含其他对象。
  • 容器视图下方的
  • UITableView

我希望滚动从UITableView开始经过容器视图,然后滚动表格的内容。

我希望我的桌子有一个标题视图,它会粘在UINavigationController下的顶部。

如果我执行类似myTableView.tableHeaderView的操作,则会在导航栏下滚动。

如果我使用表格视图方法添加标题视图,它会在屏幕中间(它开始的位置)冻结。

这是我的viewDidLayoutSubviews代码:

- (void)viewDidLayoutSubviews {
    [super viewDidLayoutSubviews];
    [self.myTableView setContentInset:UIEdgeInsetsMake(self.containerView.bounds.size.height, 0.f, 0.f, 0.f)];
    [self.myTableView scrollRectToVisible:CGRectMake(0, 0, 1, 1) animated:NO];

    float headerImageYOffset = 88 + self.containerView.bounds.size.height - self.view.bounds.size.height;
    CGRect headerImageFrame = self.containerView.frame;
    headerImageFrame.origin.y = headerImageYOffset;
}

这是我的标题代码和滚动代码:

- (UIView *)tableView:(UITableView *)tableView viewForHeaderInSection:(NSInteger)section {
    // This is made in Interface Builder
    return self.headerView;
}

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

- (void)scrollViewDidScroll:(UIScrollView *)scrollView {
    CGFloat scrollOffset = -scrollView.contentOffset.y;
    CGFloat yPos = scrollOffset - _containerView.bounds.size.height;
    _containerView.frame = CGRectMake(0, yPos, _containerView.frame.size.width, _containerView.frame.size.height);   
}

需要改进哪些内容才能让标题与表格一起滚动并保留在顶部的导航栏下?

如果需要查看其他代码,请告知我们。

编辑:

我添加了更多与我想要完成的内容相关的代码。见上文。

1 个答案:

答案 0 :(得分:0)

您不需要实现scrollViewDidScroll:,只需在表格视图的父级和标题之间添加自动布局约束:

- (void)viewDidLoad {
    NSLayoutConstraint* contraint = [NSLayoutConstraint constraintWithItem:self.headerView attribute:NSLayoutAttributeTop relatedBy:NSLayoutRelationGreaterThanOrEqual toItem:self.view attribute:NSLayoutAttributeTop multiplier:1.0 constant:self.topLayoutGuide.length];
    [self.view addConstraint:contraint];
}