根据内容动态设置 UIScrollView 高度和 UITableView 高度
Posted
技术标签:
【中文标题】根据内容动态设置 UIScrollView 高度和 UITableView 高度【英文标题】:Dynamically set UIScrollView height and UITableView Height depending on content 【发布时间】:2011-04-11 22:57:13 【问题描述】:设置:我有一个带有标签、uiimage 和嵌套在其中的 tableview(分组)的滚动视图。标签、uiimage 和 tableveiw 由 Web 服务填充。分组表视图中的最后一部分包含永远不会相同的文本,可能长达 5 个字符到 250+ 个字符。此外,这个视图是从一个基本的 tableview 推送的(所以它有一个导航栏。如果这很重要的话)。
预期:tableview 的高度应取决于从 Web 服务接收到的内容的长度。然后设置scrollview高度以适应tableview的高度
问题:我不太确定如何解决这个问题。我真的只知道怎么把高度改成固定值,很多场景下都不能正常工作。
【问题讨论】:
【参考方案1】:单元格的宽度和高度被忽略;单元格将根据您从-tableView:heightForRowAtIndexPath:
或(失败)tableView.rowHeight
返回的值重新调整大小。如果单元格中的标签的大小足够大,它可能看起来好像单元格足够大,因为允许标签大于(并呈现在单元格之外)。
一种方法是覆盖-tableView:heightForRowAtIndexPath:
以返回正确的高度。这并不是 UITableView 的真正预期用途(它主要是为多个单一高度的行设计的,从内容列表动态生成)。
另一种方法是设置tableView.tableFooterView = myCustomFooter
。这可能是最简单的方法。在执行分配之前正确调整大小(高度很重要;表格视图无论如何都会为您设置宽度)。还要确保未设置自动调整大小标志,否则当表格视图改变大小时(例如在自动旋转时),大小会出现随机变化。
【讨论】:
我不是要获取单元格的高度。作为 GROUPED TABLE 的 UITABLEVIEW 需要根据在第 4 部分中找到的内容的长度而变得更高或更短。第 4 部分中的所有文本都显示没有问题。当我根据静态值更改 UITABLEVIEW 的高度时,我可以看到它。它被切断了,因为它的初始高度设置为 450。然后,一旦设置了该高度,我需要能够设置 uiscrollview 以补偿 uitableview 的高度,以便我可以向下滚动并查看整个表格。跨度> 我不明白为什么要在页脚中设置一些内容。 “正确调整大小”是什么意思?就像我说的,我也不知道设置它的大小,因为文本永远不会是相同长度的字符。谢谢。 UITableView 是 UIScrollView 的子类。你把 UITableView 放在 UIScrollView 里了吗?如果您只是将非表格内容放入表格视图页眉/页脚,则更有可能工作。或者,您可以使用 tableView.contentSize (也许您需要强制布局?我不知道;这很恶心)... 哦!我想我明白你在说什么!将我的标签和 uiimage 放在标题中,让 UiTableView 处理它。我会试试看。谢谢。 :) 成功!!!非常感谢你。我现在可以把我的挫败感集中在别的事情上!哈哈!【参考方案2】:我只关注可变高度元素,找出适合文本的高度。要计算一个字符串在渲染时的高度,可以使用如下的 sn-p:
CGFloat MY_TABLECELL_WIDTH = 320;
CGFloat MY_MAX_HEIGHT = 10000;
UIFont *MY_FONT = nil; // load the correct font here.
CGSize maxSize = CGSizeMake(MY_TABLECELL_WIDTH,MY_MAX_HEIGHT);
CGSize textSize = [serverString sizeWithFont:MY_FONT
constrainedToSize:maxSize
lineBreakMode:UILineBreakModeWordWrap];
【讨论】:
包含可变文本长度的单元格适合。表格视图不够高,无法显示所有内容,滚动视图也无法容纳滚动所需的高度。以上是关于根据内容动态设置 UIScrollView 高度和 UITableView 高度的主要内容,如果未能解决你的问题,请参考以下文章