添加换行符后 UITextView 高度变为可滚动

Posted

技术标签:

【中文标题】添加换行符后 UITextView 高度变为可滚动【英文标题】:UITextView height changes to scrollable after adding Line Break 【发布时间】:2019-06-15 12:00:59 【问题描述】:

我正在尝试设置 UITextview 的高度,并且在我尝试格式化文本之前一切正常。

一个例子可能是“/n”或使用 Swift Multiline String Literals 的换行符。

之后,Textview 变得可滚动,具有某种最大高度值。

格式化文本会破坏“self.overViewTxt.contentSize.height”吗?

谢谢。

@IBOutlet weak var overViewTxt: UITextView!
@IBOutlet weak var overviewTxtHC: NSLayoutConstraint!

overViewTxt.text = "Lorem ipsum dolor sit er elit lamet, consectetaur cillium adipisicing pecu, \n sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum. Nam liber te conscient to factor tum poen legum odioque civiuda.Lorem ipsum dolor sit er elit lamet, consectetaur cillium adipisicing pecu, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua."

overviewTxtHC.constant = self.overViewTxt.contentSize.height

overViewTxt.text = """
    Lorem ipsum dolor sit er elit lamet, consectetaur cillium adipisicing pecu, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.
    Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat\n  non proident, sunt in culpa qui officia deserunt mollit anim id est laborum. Nam liber te conscient to factor tum poen legum odioque civiuda.Lorem ipsum dolor sit er elit lamet, consectetaur cillium adipisicing pecu, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.
    """

【问题讨论】:

【参考方案1】:

UITextView 具有自动计算高度的独特属性。您不需要采用 IBOutlet 约束或不提供任何修复 HEIGHT 约束,而不需要禁用它的滚动属性,然后分配任何文本,它将自动变成它的大小。

注意:确保提供适当的约束,即顶部、底部、前导和尾随。

【讨论】:

该死的,这太简单了。显然是我想多了。谢谢!【参考方案2】:

尝试更新框架而不是使用约束:

overViewTxt.text = "Lorem ipsum dolor sit er elit lamet, consectetaur cillium adipisicing pecu, \n sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum. Nam liber te conscient to factor tum poen legum odioque civiuda.Lorem ipsum dolor sit er elit lamet, consectetaur cillium adipisicing pecu, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua."

let overviewTxtHCSize = overviewTxtHC.intrinsicContentSize
overviewTxtHC.bounds.size = overviewTxtHCSize

【讨论】:

以上是关于添加换行符后 UITextView 高度变为可滚动的主要内容,如果未能解决你的问题,请参考以下文章

UITextView 文字在高度达到 8192.0 后变得不可见

iOS UITextView 高度随文字自己主动添加,并尾随键盘移动

粘贴长文本时UITextView动态高度滚动不起作用

滚动 UITextView 而不换行

添加文本和禁用滚动时如何使 UITextView 字段扩展?

为啥 UITextView 高度仅在滚动时变为动态?