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

Mun*_*ndi 5 uitableview uitextfield ios autolayout swift

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

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

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

因为文本视图本身是a UIScrollView,动态大小的表视图单元视图的正常自动维度机制将不起作用(即使用UITableViewAutomaticDimension).因此,我试图实施heightForRowAtIndexPath.为了确定必要的高度,我认为只需要:

  • 标签中的文本及其属性
  • 文本的文本视图,再加上其属性
  • 表视图的宽度(因为它是"普通"而不是"分组")

有了这些信息,我估计,我可以使用sizeThatFits辅助对象来确定必要的高度.

但是,我不愿意将标签和文本视图之间的水平边距硬编码到我的尺寸计算中,所以理论上我还需要NSLayoutConstraint插座

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

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

想要简洁优雅的解决方案吗?

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