使用带有小型表的UITableViewController?

rpj*_*rpj 15 iphone cocoa-touch objective-c uitableview

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

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

没有框架或边界争论似乎可以正确地重置表的大小,因此它"太长",这意味着有一系列行被推出屏幕底部并且不可见也不可通过滚动.

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

谢谢!

更新我尝试了这里建议的所有技术无济于事,但我确实发现了一件有趣的事情:如果我完全避开UINavigationController(我不愿意为生产而做,而是作为实验),并添加作为表视图直接我所提到的封闭视图的子视图中,给定的帧大小被推崇.在那一刻我再推出的UINavigationController混进去,不管是以前还是表视图后添加作为一个子视图,也不管之前或表视图添加作为一个子视图后,如果分配/初始化吧,结果和以前一样.

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

更新2在屏幕上的表格视图之后检查帧大小的建议很好:事实证明导航控制器实际上在加载和显示之间的某个时间调整大小.我的解决方案,最好是hacky,一直缓存加载时给定的帧,如果在tableView:cellForRowAtIndexPath:的开头更改,则重置它.你问为什么?因为它是我找到的一个有用的地方,这就是原因!

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

Ben*_*ieb 11

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


Bla*_*ago 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)];
}
Run Code Online (Sandbox Code Playgroud)

这是在父(在我的情况下只是一个普通的UIViewController)控制器中完成的.