UITableViewCell 高度基于可用屏幕空间
Posted
技术标签:
【中文标题】UITableViewCell 高度基于可用屏幕空间【英文标题】:UITableViewCell height based on available screen space 【发布时间】:2014-09-17 06:22:08 【问题描述】:我想为我的UITableView
创建一个布局,使其分为 2 个部分:
第一部分有 3 行标准高度(44px),
第二部分有一行,其中包含一个UITextView
,它完全填满了这个单元格。棘手的部分是我想将此textView
的单元格行调整为可见tableview
区域的高度,以便文本视图占据屏幕上的剩余视图。我如何找出,在
- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath
剩余的高度是什么样的?我之前根据两种可用的 iPhone 屏幕尺寸(480 和 568)做出了硬编码假设,但对于新的 iPhone6 和 iPhone 6+ 屏幕,我不想使用任何假设值来计算。
【问题讨论】:
不是硬编码480
或568
是检查self.view.bounds.size.height
不够好?
可能是这样。但是我如何从单元格的开头偏移它呢?在heightForRowAtIndexPath
中,UITableViewCell(来自 section:1 row:0)不会返回有意义的帧来确定该单元格在 tableview 中的位置(垂直)
您可以使用tableView.contentOffset.y
获取当前表滚动视图偏移量。那么这只是一个计算问题。如果您需要考虑标题高度和其他内容,您可以使用[tableView heightForHeaderInSection:]
等获取它们。如果您可以发布一些图片并提供更多详细信息,我可能会为您提供更好的帮助。
【参考方案1】:
您已经在tableView.bounds.size.height
处获得了表格视图的高度,您只需要从中减去第一部分的高度。所以
- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath
if (indexPath.section == 0)
return 44;
return tableView.bounds.size.height - 44 * 3;
根据标题的行为,您可以使用rectForHeaderInSection:
或rectForSection:
来获取高度
【讨论】:
部分标题也有高度,所以这将是不准确的【参考方案2】:如果您确定永远不会更改行数,则可以从情节提要中静态执行此操作。 您可以根据需要插入任意数量的原型单元。通过自动布局或自动调整大小,您可以将单元格设置为静态或随屏幕大小而增加。
但是,如果您真的想以编程方式制作它,您可以使用self.view.bounds.size.height
撤消 3 个单元格和 2 个部分标题,剩下的是您的 UITextView 单元格。
【讨论】:
不确定如何在此处使用自动布局。我们需要根据可用空间计算 UITableViewCell 的大小。不确定自动布局如何做到这一点(除了在计算高度后在代码中设置常量,这无论如何都是问题) 您可以通过保留第一部分而不进行任何自动调整大小,并且只有动态需要它的单元格应该具有 UIViewAutoresizingFlexibleBottomMargin 和 UIViewAutoresizingFlexibleHeight以上是关于UITableViewCell 高度基于可用屏幕空间的主要内容,如果未能解决你的问题,请参考以下文章
如何根据设备屏幕objective-c设置UITableViewCell高度
UITableViewCell内的UICollectionView如何根据屏幕大小调整tableview单元格高度