使用自动布局确定heightForRowAtIndexPath中UITextView的宽度

时间:2016-01-12 15:18:57

标签: ios swift uitableview autolayout uitextfield

一个相当复杂的问题,寻找一个优雅的解决方案:

UITableViewCell子类左侧有UILabel,右侧有UITextView。标签和文字视图都包含动态内容。我正在使用文本视图而不是另一个标签,因为我需要地址链接识别。

标签具有比文本视图更高的抗压性,因此其右边缘将根据需要向右扩展(达到一定限制)。文本视图的宽度将被压缩。文本视图设置为自动换行为向下扩展

由于文本视图本身就是UIScrollView,因此动态大小的表格视图单元格视图的常规自动尺寸机制将无效(即使用UITableViewAutomaticDimension)。因此,我尝试实施heightForRowAtIndexPath。为了确定必要的高度,我只需要:

  • 标签中的文字,加上属性
  • 文字视图中的文字,加上属性
  • 表格视图的宽度(因为它是“普通”而不是“分组”)

根据这些信息,我估计,我可以在辅助对象上使用sizeThatFits来确定必要的高度。

但是,我不愿将标签和文本视图之间的水平边距硬编码到我的尺寸计算中,因此理论上我还需要NSLayoutConstraint个出口

  • 标签的左边距到其超级视图
  • 标签
  • 的最大允许宽度
  • 标签与文字字段之间的水平距离
  • 文本字段的右边距到其超级视图

这看起来真的很疯狂!在我写这个实现时,我问自己是否有更简单的方法来实现同样的目标。 (这就是为什么我还没有编写代码来发布这里。)毕竟,这里唯一的难题是如何获得文本视图的可用宽度,但到达那里的方式似乎过度复杂。

任何有关简洁,优雅解决方案的想法?

附注:必须在渲染单元格之前计算。此外,在使用scrollingEnabled时,将文本视图的false设置为sizeThatFits会产生奇怪的结果。

0 个答案:

没有答案