我已经将一个表格视图拖到我的情节提要场景中,但它的高度是静态的,并且不会根据它包含的单元格数量进行调整,除非我在情节提要中手动调整它。我怎样才能让这张桌子根据其内容的总高度调整自己的高度?
问问题
3118 次
1 回答
1
你将不得不做这个的一些版本:
- 弄清楚将显示多少个单元格
- 找出每个单元格的高度
- 做数学并设置高度
UITableView
在你生气之前(因为我知道这很明显),让我跟进一下:
- 如果您确定将始终显示多少个单元格(并且它是一个静态值),您可以在 Interface Builder 中手动调整高度。
- 如果您不确定(根据您的问题,我猜是这种情况),您必须在运行时执行上述 1 到 3 的操作。然后,因为
UITableView
是 的子类UIView
,你可以简单地调整它的frame
属性。
例如:
- 我有7个细胞。
- 单元格 1、3 和 5(索引 0、2 和 4)的高度为 20 像素。
- 单元格 2、4、6 和 7(索引 1、3、5 和 6)的高度为 30 像素。
- 我需要 180 像素的总显示高度(由于分隔符等,您实际上可能需要使用它。)
- 所以,我可以打电话:
CGFloat newHeight = ... // Whatever you calculate
CGRect currentFrame = [[self MyTableView] frame];
[[self MyTableView] setFrame:CGRectMake(
currentFrame.origin.x,
currentFrame.origin.y,
currentFrame.size.width,
newHeight)
];
如果您想变得非常花哨,可以通过将其包装在一个[UIView animationWithDuration:]
块中来为更改设置动画。
希望这可以帮助!
更新/编辑
这是一种笨拙的方法......它有效,但我确信有更好的方法来做到这一点。我不认为这是最好/最快/最有效的方式。这更多是为了说明一个原则。;-)
- (CGFloat)totalHeightNeededForTableView:(UITableView *)tv {
CGFloat retVal = 0;
int sectionCount = [self numberOfSectionsInTableView:tv];
int rowCount = 0;
NSIndexPath *path = nil;
for (int i = 0; i < sectionCount; i = i + 1) {
rowCount = [self tableView:tv numberOfRowsInSection:i];
for (int j = 0; j < rowCount; j = j + 1) {
path = [NSIndexPath indexPathForRow:j inSection:i];
retVal = retVal + [self tableView:tv heightForRowAtIndexPath:path];
}
}
return retVal;
}
于 2012-05-04T15:54:43.513 回答