【问题标题】:Adding UITableViewController at specific position in its superview在其父视图的特定位置添加 UITableViewController
【发布时间】:2026-02-16 08:45:01
【问题描述】:

好的,让我解释一下这个场景。我正在开发一个在主窗口中有背景图像的应用程序。我还有一个导航控制器,它不位于屏幕顶部,而是向下 100 像素。导航控制器是半透明的,因此您可以通过它看到背景。

现在问题来了。在应用程序的某个时刻,用户单击一个按钮,我有一个 UITableViewController 类,我使用 pushViewController 添加到导航控制器。这样做的问题是,虽然 tableview 的顶部直接出现在导航控制器下方,但它在导航控制器后面放置了一个白色背景,从而消除了半透明效果。

我尝试了以下方法: - 设置我的 tableviewcontroller 视图的 frame 属性, IE。

tableviewcontroller1.view.frame= CGRectMake(0,120,320,300);

(我玩过 y 位置,但无论我做什么都没有区别。)

我想也许我可以创建一个 UIViewController 并创建一个具有透明背景的视图,然后将 tableviewcontroller 添加为子视图,这样做我希望我在 tableviewcontroller 中设置的框架边界会生效。我尝试了以下方法:

[parentview.view addSubView: tableviewcontroller1]; // runtime error
[parentview.view addSubView: tableviewcontroller1.view]; // runtime error
[parentview.view addSubView: tableviewcontroller.tableView]; // runtime error

我真的很难理解为什么设置我的 tableviewcontroller.view 的 frame 属性没有效果,我检查了我所有的超级视图,但没有一个勾选“resize subviews”属性。

非常感谢对此的帮助,我真的被困在这里,我已经做了很多搜索但找不到答案。

非常感谢 迈克尔

【问题讨论】:

  • 你得到什么运行时错误?
  • 你想让表格视图有白色背景还是透明背景?

标签: ios5 uinavigationcontroller xcode4.2 uitableview


【解决方案1】:

您所说的导航控制器可能是UINavigationBar。导航控制器控制各种视图控制器,导航栏是属于导航控制器的UI界面。

要解决您的问题,只需为表格视图设置透明背景即可。

// in NewTableViewController.m, viewDidLoad
self.tableView.backgroundColor = [UIColor clearColor];

如果出于某种原因您需要一个在表格视图控制器上方和下方有一些空间的视图,您必须自己创建一个视图控制器并插入一个表格视图。标准UITableViewController 将表视图设置为控制器的主要view,因此无法调整大小...

  1. 创建一个UIViewController 子类(不是UITableViewController)。
  2. 使控制器符合<UITableViewDelegate, UITableViewDatasource>
  3. 创建一个名为tableView@property
  4. 初始化时,将self设置为table view的delegatedatasource
  5. 在 tableView 上方创建一个适当大小的透明视图。这个视图和表格视图都是视图控制器的主 view 的子视图。
  6. 手动为表视图实现必要的数据源和委托方法。

【讨论】:

  • 感谢 Mundi 的解释,我希望我可以使用现有的 UITableViewController 子类来做到这一点。我基本上实现了你的建议,但改用 IB 并插入了一个 UITableView 项。
最近更新 更多