非滚动tableViewHeader

Posted

技术标签:

【中文标题】非滚动tableViewHeader【英文标题】:Non scrolling tableViewHeader 【发布时间】:2009-08-16 09:00:41 【问题描述】:

首先是一些背景信息:

我有包含 UITableView 的 UIViewController。在 loadView 方法中(表初始化后),我将 UIViewControllers 视图设置为表视图:self.view = tableView;

我想要的是屏幕顶部的一个视图(在 UITableView 之前),它在滚动时不会随表格视图的其余部分一起滚动。我尝试将我的 UIView 添加到表格视图的 tableViewHeader 中,它可以正确显示但会随着表格的其余部分滚动。

有什么简单的解决方法吗?无论哪种方式,我们都非常感谢任何有关解决方案的提示。

编辑:

想一想,我想要的是类似于股票应用程序的东西,其中底部是固定的,屏幕的其余部分是 UITableView。唯一的区别是我想要屏幕顶部的静止部分。

【问题讨论】:

【参考方案1】:

正如 kmit 已经指出的那样,您可以轻松地将多个子视图添加到您的视图中。因此,不要将表视图直接设置为self.view,而是创建一个空白UIView(作为容器)并将表视图和标题视图作为子视图添加到该视图。您可以通过它们的框架属性控制视图的范围。一个简单的例子:

- (void)loadView 
    UIView* view = [[UIView alloc] initWithFrame:CGRectMake(0, 0, 320, 460)];
    [view setAutoresizingMask:UIViewAutoresizingFlexibleHeight|UIViewAutoresizingFlexibleWidth];

    // header view
    HeaderView* headerView = [[HeaderView alloc] initWithFrame:CGRectMake(0, 0, 320, 182)];
    self.headerView = headerView;   // in case you need the reference later on
    [view addSubview:headerView];
    [headerView release];

    // table view
    UITableView* tableView = [[UITableView alloc] initWithFrame:CGRectMake(0, 182, 320, 186) style:UITableViewStylePlain];
    [tableView setAutoresizingMask:UIViewAutoresizingFlexibleHeight|UIViewAutoresizingFlexibleWidth];
    tableView.delegate = self;
    tableView.dataSource = self;
    [view addSubview:tableView];
    self.tableView = tableView;
    [tableView release];

    self.view = view;
    [view release];

作为手动创建包含UIView 的替代方法,您可以在loadView 实现的开头调用[super loadView]

【讨论】:

【参考方案2】:

是否有理由将 UIViewController 的视图设置为 UITableView 的视图?为什么不将 UITableView 作为子视图处理?这将允许您在 UITableView 上方添加您想要的任何内容 - 另一个视图、以 UIViewController 的视图作为背景的空白空间等。

【讨论】:

你有什么建议?我尝试通过说: [self.view addSubview:headerView] 将 UIView 和 UITableView 添加到 UIViewController和 [self.view addSubview:tableView];每个视图都已使用适当的框架进行了初始化。当我这样做时,程序崩溃并且调试器启动显示:Loading 95186 stack frames... 嗯,发现错误。我早些时候尝试过你的方法,正如我所说,整个事情都崩溃了。那是因为我忘了放 [super loadView];在我的 loadView 方法中。所以我会给你正确的答案,因为你的方法是我最终会使用的。

以上是关于非滚动tableViewHeader的主要内容,如果未能解决你的问题,请参考以下文章

非滚动tableViewHeader

如何在 UIScrollView 的滚动指示器下方放置非滚动 UIView?

以编程方式将非活动选项卡滚动到底部

非激活窗口中响应鼠标滚动之理论篇

在非滚动 UICollectionView 中动态调整 UICollectionViewCell 的大小

如何在 Swiftui 的主视图底部的滚动视图中放置一个非粘性按钮? Spacer 在滚动视图中似乎没有效果