gpt4 book ai didi

objective-c - 将 Storyboard 创建的 UITableview 的高度调整为其内容的高度

转载 作者:行者123 更新时间:2023-11-29 04:40:36 24 4
gpt4 key购买 nike

我已将表格 View 拖到 Storyboard场景中,但其高度是静态的,并且不会根据其包含的单元格数量进行调整,除非我在 Storyboard中手动调整它。如何让该表格根据其内容的总高度调整其自高度度?

最佳答案

您将必须执行以下操作:

  1. 计算出将显示多少个单元格
  2. 计算出每个单元格的高度
  3. 计算并设置 UITableView 的高度

在你生气之前(因为我知道这很明显),让我跟进一下:

  1. 如果您确定始终会显示多少个单元格(并且它是静态值),则只需在 Interface Builder 中手动调整高度即可。
  2. 如果您不确定(根据您的问题,我猜测是这种情况),则必须在运行时执行上面的#1 到3。然后,由于 UITableViewUIView 的子类,因此您只需调整其 frame 属性即可。

例如:

  1. 我有 7 个细胞。
  2. 单元格 1、3 和 5(索引 0、2 和 4)的高度为 20 像素。
  3. 单元格 2、4、6 和 7(索引 1、3、5 和 6)的高度为 30 像素。
  4. 我需要 180 像素的总显示高度(由于分隔符等原因,您实际上可能需要使用此高度......)
  5. 所以,我可以调用:
<小时/>
CGFloat newHeight = ... // Whatever you calculate
CGRect currentFrame = [[self MyTableView] frame];
[[self MyTableView] setFrame:CGRectMake(
currentFrame.origin.x,
currentFrame.origin.y,
currentFrame.size.width,
newHeight)
];

如果您想变得非常奇特,您可以通过将其包装在 [UIViewanimationWithDuration:] block 中来为更改添加动画效果。

希望这对您有所帮助!

<小时/>

更新/编辑

这是一种笨拙的方法......它有效,但我确信有更好的方法。我并不声称这是最好/最快/最有效的方法。这更多是为了表明一个原则。 ;-)

- (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;
}

关于objective-c - 将 Storyboard 创建的 UITableview 的高度调整为其内容的高度,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10451851/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com