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

首先是一些背景信息:

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

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

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

编辑:

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

【问题讨论】:

    标签: iphone uitableview uiview


    【解决方案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 方法中。所以我会给你正确的答案,因为你的方法是我最终会使用的。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-01-26
      相关资源
      最近更新 更多