【问题标题】:Issue with UITableView scroll on iOS where my table header isn't scrollingiOS 上的 UITableView 滚动问题,我的表头没有滚动
【发布时间】:2016-03-12 16:23:17
【问题描述】:

这是我的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);   
}

需要改进哪些内容才能让表头随表格滚动并停留在顶部导航栏下方?

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

编辑:

我添加了更多与我想要完成的工作相匹配的代码。见上文。

【问题讨论】:

    标签: ios objective-c uitableview


    【解决方案1】:

    你不需要实现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];
    }
    

    【讨论】:

    • 删除我的 scrollViewDidScroll 方法会带走我想要的效果。
    猜你喜欢
    • 1970-01-01
    • 2011-11-24
    • 2011-11-20
    • 1970-01-01
    • 1970-01-01
    • 2013-03-18
    • 2011-08-30
    • 2016-07-07
    • 1970-01-01
    相关资源
    最近更新 更多