当前位置: 首页 > 知识库问答 >
问题:

在UITableViewCell上调用“[UIView-systemLayoutSizeFitting Size:]”总是失败

宓英哲
2023-03-14

我想对UITableViewCells使用自动布局。这些表格单元格具有动态高度(取决于文本长度)。

我正在使用[UIView-systemLayoutSizeFittingSize:]计算适当的单元格高度(要在[UITableView-heightForRowAtIndexPath:]中返回),但我一直得到以下结果:

> < li>

如果我传递< code > uilayoutfitingcompressedsize ,我将返回一个(0,0)的CGSize。

如果我通过 UILayout 调整扩展大小,我的应用程序崩溃并出现此错误:

***-[NSISLinearExpression incrementConstant:]、/SourceCache/Foundation_Sim/Foundation-1043.1/Layout.subbj/IncrementalSimplex/NSISLinearExpression.m:620中的断言失败

(我的猜测是,这意味着某个数字是无限的。)

我的实现很简单。我计算每个对象的高度,然后缓存它:

MessageCell *cell = // allocate a new cell...

//  set up the cell (assign text, images, etc)

CGSize size = [cell systemLayoutSizeFittingSize:UILayoutFittingCompressedSize];

self.cellHeight = size.height;  // size always equals (0, 0)

我假设这是我设置的约束的问题,但是:

    < li >如果我手动将< code>cellHeight设置为一个较大的值,除了高度不正确之外,单元格看起来都很好。 < li >界面生成器不警告我不明确的约束条件 < Li > < code >[cell hasAmbiguousLayout]返回< code >否。 < li >我的单元格中有一个大小为48x48的图像,因此大小为(0,0)不应该满足所有约束。

有什么想法吗?

共有2个答案

高晋
2023-03-14

基于你的帖子很难说出具体的内容,因为你没有发布你使用的约束条件。Apple文档:

systemLayoutSizeFittingSize:

返回满足其约束的视图大小。

也许您创建了约束,这些约束可以用单元格大小等于 (0,0) 的方式进行解释。

还有另一种方法可以检查带有文本的单元格的高度。您可以将文本放在 UI 文本视图中,然后:

UITextView textView; 
textView.text = @"l";
textView.font = [UIFont fontWithName:FONT_NAME size:FONT_SIZE];
//some code here
//
CGFloat cellHeight = textView.contentSize.height;

在使用 contentSize 属性之前,设置 UITextView 的文本和字体(以及可能导致 UITextView 高度更改的所有其他属性)非常重要。此外,还必须首先将 UI 文本视图添加到视图中。

///////编辑

你使用约束的方法的问题可能是你想测量没有添加到视图中的单元格,这样系统就没有它需要的所有信息。它不知道空间有多大,因为它不知道单元格的周围区域。

暴夕
2023-03-14

这就是对我有用的(注意“内容视图”)

CGSize size = [cell.contentView systemLayoutSizeFittingSize:UILayoutFittingCompressedSize];

编辑:我回答了一个类似的问题,并提供了一个完整的例子,在这里:

如何调整超级视图的大小以适合具有自动布局的所有子视图?

 类似资料:
  • 我放在表格视图中的代码:cellForRowAtIndexPath:- 要查看UITableViewCell中的任何动画,应该使用哪种方法或放置哪种类型的动画。我知道我无法设置现有标签的动画,因为这些标签带有约束。

  • 问题内容: 我尝试调用-method,但是它总是失败。我的变量始终是。我在这里查看了一些类似的帖子,但没有一个完全适合我的需求。这是我的代码: 这是我尝试解决的方法: 我尝试使用该方法 并且 但是没有任何效果。一直都是。我还尝试给它一个文字字符串作为路径,设置为,甚至更改了我想将其设置为777的目录权限,但注意了。永远是错误的。希望您能为您提供帮助。任何帮助都非常感谢。谢谢 问题答案: 这是一个问

  • 我在viewcontroller的中央有一个UITextField(搜索字段),我正在使用UIView(liveView)创建一条细线。我以编程方式创建线视图及其约束。lineView本质上是一个下划线,当用户键入时,它在文本字段下的宽度会增加。用户按enter键后,我将调整约束,以便文本字段和视图移动到viewcontroller的顶部。我让它工作起来了,但随着线视图向上移动,它开始淡出并消失。

  • 问题内容: 我有一个自定义子类,其中包含一些从笔尖连接的方法。 在iOS 8下,一切正常。如果用户点击其中一个按钮,则会调用相应的按钮。如果用户点击该单元格上的其他任何位置,则将调用。 在iOS 9下,永远不会调用我的IBAction方法。在 始终不管其中用户在小区(按钮或不)抽头的烧成。 该项目在Xcode 6 / Swift 1.2下编译。 我在没有解决方案的Apple论坛上找到了这篇文章。他

  • 问题内容: 我正在使用hamcrest 1.3测试我的代码。这简直是​​死。我试图对其进行测试,以确保生成的数字小于13。我有一条打印语句,其中打印了生成的数字。生成的数字始终小于13,但测试始终失败。我做错什么了吗? 这是我正在测试的代码。 这是我的测试代码。 编辑:这是故障堆栈跟踪。 问题答案: 这是帮助我解决问题的站点。 http://code.google.com/p/hamcrest/i

  • 上面的代码在桌面JVM上工作,发送一个帖子请求,在服务器端成功解析,响应200,但是在Android系统上,请求方法保持GET(是的,我检查了它是假的),并导致404异常。官方文档表示,将doOutput设置为true会触发将请求方法设置为POST,但情况似乎并非如此。