【发布时间】:2019-02-14 13:58:24
【问题描述】:
我正在努力制作一个类似于 iMessage 的聊天气泡。我必须使用 UITextView 来利用 DataDetectors 自动检测 url、电话号码和地址。我的视图层次结构是这样的;
-UITableViewCell
-ContentView
-ChatBubbleContainerView
-UITextView
ChatBubbleContainerView 有约束
- 10-pt 左、右、上、下边距 -->
ContainerView
UITextView 有约束
- 10-pt 的左、右、上、下边距 -->
ChatBubbleContainerView
我想实现一种行为,使文本视图根据其内部的内容自动扩展其高度和宽度,例如文本。但是文本视图没有固有的内容大小。
这些是我尝试过但得到错误结果的方法
- 覆盖文本视图的
intrinsicContentSize属性,但它是 也不行。 - 为
ChatBubbleContainerView提供宽度约束并将其更改为sizeThatFits()方法的结果 - 为
ChatBubbleContainerView提供宽度约束并将其更改为text.boundingRect方法的结果
这些是我得到的结果
- 当我滚动表格视图时,它无法正常工作,并且单元格的布局不符合预期
- 它可以工作,但笔尖中单元格的初始宽度为 375-pt,这对于 4.7 英寸设备来说是不错的,但是当我切换到 iPhone SE 等设备时,在初始表格视图加载或单元格插入时有 4 英寸,单元格的宽度是根据 375-pt 而不是 320-pt 计算的。滚动单元格后,布局按预期布局。
- 与 2 相同。
当我尝试与UILabel 相同的布局时,它按预期工作。您可能知道UILabel 具有固有的内容大小。
谢谢
【问题讨论】:
-
您是否禁用了
UITextView的滚动功能?如果没有,请这样做。然后它的行为方式应该与UILabel -
@DonMag 我已禁用 UITextView 的滚动以防止滚动处于活动状态
-
好的,那么你有一些其他的限制导致了这个问题。试试这个测试:创建一个新的视图控制器;添加
UITextView;关闭滚动;约束它Leading: 20,Top: 100和Trailing >= 20,no 高度或底部约束;将 Lorum Ipsum 填充器的默认文本更改为“测试”并运行应用程序。您的文本视图应为 1 行高,并且仅与“测试”一词一样宽。在您键入时,文本视图将水平扩展直到需要换行,然后它会垂直扩展。
标签: ios objective-c swift uitableview uikit