当使用UITableViewController时,initWithStyle:方法会自动创建底层的UITableView - 根据文档 - “正确的尺寸”。
我的问题是这些“正确的尺寸”看起来是320x460(iPhone的屏幕尺寸),但是我将这个TableView / Controller对推到了一个UINavigationController中,它本身包含在UIView中,它本身大约是一半的高度。屏幕。
没有任何框架或边界争论似乎可以正确地重置表的大小,因此它“太长”,这意味着有一系列行被推离屏幕底部并且不可见滚动也无法达到。
所以我的问题归结为:告诉UITableViewController将其组件UITableView调整为指定矩形的正确方法是什么?
谢谢!
更新我已经尝试了这里建议的所有技术无济于事,但我确实发现了一件有趣的事情:如果我完全避开UINavigationController(我不愿意为生产做,但作为一个实验),并将表视图添加为我提到的封闭视图的直接子视图,给出了给定的帧大小。 非常时刻我重新将UINavigationController引入混合中,无论是在表视图之前还是之后添加为子视图,无论是在表视图之前还是之后的alloc / init作为子视图添加,结果与之前相同。
我开始怀疑UINavigationController不是团队合作者......
更新2 在屏幕上的表格视图之后检查帧大小的建议很好:事实证明导航控制器实际上在加载和显示之间的某个时间调整大小。我的解决方案,最好是hacky,一直缓存加载时给定的帧,如果在tableView:cellForRowAtIndexPath:的开头更改,则重置它。你问为什么?因为这是我找到的有效的地方,所以这就是原因!
我不认为这是一个解决方案,因为它显然是不合适的,但为了其他人阅读的好处,它似乎确实有效。
答案 0 :(得分:11)
为什么不使用常规的UIViewController并手动创建表?
答案 1 :(得分: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)控制器中完成的。
答案 2 :(得分:3)
我遇到了同样的问题,我通过调整UITableViewController的viewDidAppear函数中的tableView来解决它。不是理想的解决方案,但它有效。
答案 3 :(得分:2)
您可以使用以下方式设置上边距:
UIEdgeInsets inset = UIEdgeInsetsMake(50, 0, 0, 0);
self.tableView.contentInset = inset;
这不是一个好习惯,如果你想要更多空间,你可以使用它。
不应该使用UITableViewController,只需使用UIViewController并以编程方式创建UITableview
答案 4 :(得分:1)
我同意Ben的回答。由于视图上的其他控件,我经常遇到需要调整UITableVIew大小的情况。
我通常只有一个带有UITableView IBOutlet的常规UIViewController。然后,如果我需要,我可以操纵UITableView对象的框架,使其达到我需要的大小。
答案 5 :(得分:1)
我不确定你为什么要为你的桌子创建一个额外的视图控制器。但是,在您的代码中,我没有看到您将表视图添加到其父级。您也可以尝试减小边界高度,直到整个事物出现在屏幕上;一旦你这样做,它可以让你深入了解为什么它没有像你期望的那样工作。
答案 6 :(得分:1)
检查UITableView的autoresizingMask和contentMode属性。这些都会影响框架。
答案 7 :(得分:1)
我通过此代码解决了这个问题
{
UIEdgeInsets insets;
insets.left = 0;
insets.right = 0;
insets.top = 0;
insets.bottom = 60;
self.tableView.contentInset = insets;
[self.tableView setScrollIndicatorInsets:insets];
}
答案 8 :(得分:0)
如果您使用的是Interface Builder,只需转到“Table View Size”属性窗口,然后使用另一个小部件的高度更改Content和Scroller的Bottom Insets。
答案 9 :(得分:0)
尝试:
self.edgesForExtendedLayout = UIRectEdgeNone;
//This one in case your NavigationController is not Translucent
self.extendedLayoutIncludesOpaqueBars = NO;
希望这有帮助。
答案 10 :(得分:-2)
在UINavigationController
。