在其superview中的特定位置添加UITableViewController

时间:2012-02-04 15:21:24

标签: ios5 uinavigationcontroller xcode4.2 uitableview

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

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

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

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”属性。

我非常感谢这方面的一些帮助,我真的被困在这里,我做了很多搜索,但无法找到答案。

非常感谢 迈克尔

1 个答案:

答案 0 :(得分:2)

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

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

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

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

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