【问题标题】:Add Subview to UITableView's Parent view将子视图添加到 UITableView 的父视图
【发布时间】:2025-11-22 22:55:01
【问题描述】:

我正在尝试将 subview 添加到 UITableView 的父视图,以便在 UITableView 滚动时有一个不会移动的 subview。 当我将 subview 添加到 UITableView 时,它会在用户滚动操作时随表格一起移动。

到目前为止,我的情况是我在一个 UITabBarController 上有 3 个 UINavigationController。 每个都有一个 UITableViewController。 我想在各个控制器的屏幕上添加一个子视图。但是,我不希望像这样将新的子视图添加到整个应用程序中:

[[[UIApplication sharedApplication] keyWindow] addSubview:newView];

当我将一个新控制器推送到堆栈或弹出一个时,我希望 subview 与它位于其顶部的 UITableView 一起移动和消失。保持这样一个事实,即当用户滚动 UITableView 时,新的 subview 位于其位置而不移动。 使 UITableView 和新的 subview 处于同一级别。

谢谢

【问题讨论】:

    标签: iphone ios ipad uitableview


    【解决方案1】:

    几种方法:

    首先,要将视图添加到用户滚动时保留的表格视图,如果您的表格只有一个部分,您可以为该部分添加标题。例如,这会将纯蓝色 UIView 作为标题添加到 tableview:

    - (UIView *)tableView:(UITableView *)tableView viewForHeaderInSection:(NSInteger)section
    {
        UIView *view = [[UIView alloc] initWithFrame:CGRectMake(0.0, 0.0, self.view.bounds.size.width, 50)];
        view.backgroundColor = [UIColor blueColor];
        return view;
    }
    
    - (CGFloat)tableView:(UITableView *)tableView heightForHeaderInSection:(NSInteger)section
    {
        return 50;
    }
    

    其次,如果您有多个部分,但该技巧不起作用,并且您需要使用 UIViewController 而不是 UITableViewController,请将您的标题添加到该控制器视图的顶部并在该视图的底部添加一个表格视图。您需要确保为 tableview 设置 (a) IBOutlet(通常设置为名为 tableView 的属性,以避免混淆); (b) 将视图控制器指定为此 tableview 的数据源和委托。

    第三,如果您希望此标头出现在应用程序的每个场景中,另一种方法(在 iOS5+ 应用程序中)是使用视图控制器包含,创建一个包含您的标头的容器视图,然后将您的应用程序的第一个场景添加为该视图容器的子视图。这并不难,但如果你是一个新开发者,我可能会劝阻你不要尝试。我已经做到了,效果很好,但并不适合所有人。

    第四,如果您的应用使用导航控制器,您可以自定义导航栏以呈现您的自定义外观。这一切都取决于你试图用标题完成什么。

    【讨论】:

    • 第三个选项最有帮助。尽管这很棘手。它以完美的方式完成工作。
    【解决方案2】:

    将您的子视图添加到 tableview..

    实现委托方法scrollViewDidScroll。 在 scrollViewDidScroll 上,只需设置所需的子视图中心即可。

    【讨论】:

      最近更新 更多