15

使用 UITableViewController 时,initWithStyle: 方法会根据文档自动创建具有“正确尺寸”的底层 UITableView。

我的问题是这些“正确的尺寸”看起来是 320x460(iPhone 的屏幕尺寸),但我将这个 TableView/Controller 对推入一个 UINavigationController 中,它本身包含在一个 UIView 中,它本身大约是屏幕高度的一半。

我能想出的任何框架或边界争论似乎都无法正确重置表格的大小,因此它“太长”,这意味着有一组行被推离屏幕底部并且不可见或无法通过滚动。

所以我的问题归结为:告诉 UITableViewController 将其组件 UITableView 调整为指定矩形的正确方法是什么?

谢谢!

更新我尝试了这里建议的所有技术都无济于事,但我确实发现了一件有趣的事情:如果我完全避开 UINavigationController(我还不愿意为生产做这件事,但作为一个实验),并添加表视图作为我提到的封闭视图的直接子视图,给定的框架大小是受尊重的。在我将 UINavigationController 重新引入组合的那一刻,无论它是在表视图之前还是之后添加为子视图,无论是在表视图作为子视图添加之前还是之后分配/初始化它,结果和以前一样。

我开始怀疑 UINavigationController 不是一个团队合作者......

更新 2在屏幕上的表格视图之后检查帧大小的建议是一个很好的建议:结果导航控制器实际上在加载和显示之间的某个时间调整它的大小。我的解决方案,充其量是 hacky,一直缓存加载时给出的帧,如果在 tableView:cellForRowAtIndexPath: 的开头发生更改,则将其重置。你为什么在那儿问?因为这是我发现的一个有效的地方,这就是为什么!

我不认为这是一个解决方案,因为它显然不合适,但为了其他任何阅读者的利益,它似乎确实有效。

4

11 回答 11

11

为什么不直接使用常规 UIViewController 并手动创建表格?

于 2008-10-21T18:38:58.720 回答
6

我有同样的问题,我用以下方法解决了它:

-(void) loadView {
    [self setView:[[[UIView alloc] initWithFrame:CGRectZero] autorelease]];
    [[self view] setAutoresizesSubviews:NO];

    /* Create & configure table and other views... */

    [self setResultsTable:[[RadarTableViewController alloc] initWithNibName:nil bundle:nil]];
    [[resultsTable view] setFrame:CGRectMake(0,45,320,200)];
}

这是在父控制器(在我的例子中只是一个普通的 UIViewController)控制器中完成的。

于 2009-05-28T21:50:53.433 回答
3

我遇到了同样的问题,我通过在 UITableViewController 的 viewDidAppear 函数中调整 tableView 的大小来解决它。不是理想的解决方案,但它有效。

于 2009-05-01T10:30:51.920 回答
2

您可以使用以下方法设置上边距:

    UIEdgeInsets inset = UIEdgeInsetsMake(50, 0, 0, 0);
    self.tableView.contentInset = inset;

这不是一个好习惯,以防万一你想要更多的顶部空间,你可以使用它。

不应该使用 UITableViewController ,只需简单地使用 UIViewController 并以编程方式创建 UITableview

于 2012-05-14T06:44:27.877 回答
1

我不确定你为什么要为你的表创建一个额外的视图控制器。但是,在您的代码中,我没有看到您将表格视图添加到其父级。您也可以尝试降低边界高度,直到整个东西出现在屏幕上;一旦你这样做了,它可能会让你了解为什么它没有按照你期望的方式工作。

于 2008-10-21T19:22:15.637 回答
1

我同意本的回答。由于视图上的其他控件,我经常遇到需要调整 UITableVIew 大小的情况。

我通常只有一个带有 UITableView IBOutlet 的常规 UIViewController。然后,如果需要,我可以操纵 UITableView 对象的框架以使其达到我需要的大小。

于 2008-10-21T18:45:33.963 回答
1

检查 UITableView 的 autoresizingMask 和 contentMode 属性。这些都会影响框架。

于 2008-10-21T21:05:04.383 回答
1

我用这段代码解决了这个问题

{
    UIEdgeInsets insets;
    insets.left = 0;
    insets.right = 0;
    insets.top = 0;
    insets.bottom = 60;
    self.tableView.contentInset = insets;
    [self.tableView setScrollIndicatorInsets:insets];
}
于 2014-04-16T05:07:09.510 回答
0

如果您使用的是 Interface Builder,您可以简单地转到“表格视图大小”属性窗口,然后将 Content 和 Scroller 的底部插入更改为另一个小部件的高度。

于 2008-10-23T17:53:23.490 回答
0

尝试:

self.edgesForExtendedLayout = UIRectEdgeNone;

//This one in case your NavigationController is not Translucent
self.extendedLayoutIncludesOpaqueBars = NO; 

希望这可以帮助。

于 2013-09-26T19:51:31.773 回答
-2

将框架设置在UINavigationController.

于 2012-06-14T04:58:25.157 回答