使用带有小型表格的 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 动态填充
带有巨大 BufferdImage 的小型 pdf 文件结果