使用带有小型表格的 UITableViewController?

Posted

技术标签:

【中文标题】使用带有小型表格的 UITableViewController?【英文标题】:Using a UITableViewController with a small-sized table? 【发布时间】:2008-10-21 18:33:21 【问题描述】:

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

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

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

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

谢谢!

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

我开始怀疑 UINavigationController 不太喜欢团队合作...

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

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

【问题讨论】:

【参考方案1】:

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

【讨论】:

同意,只是扩展 UIViewController,并像这样自己添加 tableView 属性 @property (nonatomic, retain) UITableView *tableView; 【参考方案2】:

我遇到了同样的问题,我解决了:

-(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)控制器中完成的。

【讨论】:

谢谢,我在 UIViewController 中的 181 px Tableview 总是缩小,现在它正在监听框架设置,因为我使用了你的 [[self view] setAutoresizesSubviews:NO]; 更好的解决方案可能是修改表格视图的autoresizingMask 属性——使其调整宽度,而不是高度。【参考方案3】:

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

【讨论】:

难以置信!我几乎没有尝试过,但这是我在尝试调整 UITableViewController 的表格视图大小时唯一可以开始工作的事情。我所做的只是在 viewDidAppear 中设置了表格视图的框架,它工作得很好。谢谢!【参考方案4】:

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

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

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

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

【讨论】:

【参考方案5】:

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

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

【讨论】:

想详细说明你是如何做到这一点的? 只需使用普通的 UIViewController 和 - 例如 - 以编程方式创建 TableView - UITableView *mTableView = [[UITableView alloc] initWithFrame:CGRectMake(0,0,320,400)]; mTableView.delegate = self; [[自我视图] addSubview:mTableView];你有它! :)【参考方案6】:

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

【讨论】:

我需要一个视图控制器才能推送到 UINavigationController,这就是它存在的原因。因此,我的印象是没有必要将表视图添加到父视图,因为视图控制器通过代理来处理。我错过了什么吗? 您是将 MyUIViewControllerSubclass 的视图出口分配给您的表,还是它的封闭视图? 如我作为“答案”发布的代码所示,我肯定将“视图”出口分配给我刚刚创建的表。【参考方案7】:

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

【讨论】:

【参考方案8】:

我通过这段代码解决了这个问题


    UIEdgeInsets insets;
    insets.left = 0;
    insets.right = 0;
    insets.top = 0;
    insets.bottom = 60;
    self.tableView.contentInset = insets;
    [self.tableView setScrollIndicatorInsets:insets];

【讨论】:

【参考方案9】:

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

【讨论】:

【参考方案10】:

试试:

self.edgesForExtendedLayout = UIRectEdgeNone;

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

希望这会有所帮助。

【讨论】:

【参考方案11】:

UINavigationController中设置框架。

【讨论】:

以上是关于使用带有小型表格的 UITableViewController?的主要内容,如果未能解决你的问题,请参考以下文章

无法让 UITableViewController 动态填充

表格 NSTabViewController

带有巨大 BufferdImage 的小型 pdf 文件结果

sklearn.SVC 在使用带有小型平衡数据集的 GridSearchCV 时返回完全不同的预测(模型)

带有sql server ce的C#小型数据库项目

为小型显示器显示彼此下方的表格列(响应式布局)