UITextView根据UITableViewCell中的文本的动态宽度

时间:2019-02-14 13:58:24

标签: ios objective-c swift uitableview uikit

我正在努力像在iMessage中那样创建聊天气泡。我必须使用UITextView来利用DataDetectors来自动检测URL,电话号码和地址。我的视图层次就像;

-UITableViewCell
 -ContentView
  -ChatBubbleContainerView
   -UITextView

ChatBubbleContainerView的约束条件

  • 左,右,上和下边距10点-> ContainerView

UITextView具有以下约束条件

  • 左,右,上和下边距10点-> ChatBubbleContainerView

我想实现一种行为,使文本视图根据其内容自动扩展其高度和宽度,例如文本。但是文本视图没有内部内容大小

这些是我尝试过并得到错误结果的结果

  1. 覆盖文本视图的intrinsicContentSize属性,但它是 也不行。
  2. ChatBubbleContainerView设置宽度约束并将其更改为sizeThatFits()方法的结果
  3. ChatBubbleContainerView设置宽度约束并将其更改为text.boundingRect方法的结果

这些是我得到的结果

  1. 它无法正常工作,并且在我滚动表格视图时单元未按预期布局
  2. 它可以正常工作,但笔尖中单元格的初始宽度为375磅,这对于4.7英寸设备来说是很好的,但是当我切换到iPhone SE之类的设备时,其初始表视图负载或单元格插入为4英寸时,单元格的宽度是根据375点而不是320点计算的。滚动单元格后,布局按预期进行布局。
  3. 与2相同。

当我尝试使用UILabel进行相同的布局时,它可以正常工作。如您所知,UILabel具有内在的内容大小。

谢谢

1 个答案:

答案 0 :(得分:0)

TextView约束很好,您需要对ChatBubbleContainerView约束进行一些更改。

ChatBubbleContainerView约束:

  • 顶部,顶部,底部-> 10分

  • MaxWidth(GreaterThanOrEqual)设置为contentView,例如 0.85 ,或者您可以将TrailingConstraint与maxConstant(GreaterThanOrEqual设置为contentView。)

您需要设置maxWidth,然后只有ChatBubbleContainerView会响应。