【问题标题】:How to resize a UITextView that automatically resize its width and height based on the content and fixed width when reaches certain value?如何调整 UITextView 的大小,当达到某个值时,它会根据内容和固定宽度自动调整其宽度和高度?
【发布时间】:2019-03-16 11:17:42
【问题描述】:

我曾尝试使用以下代码创建自动调整 UITextView。

func textViewDidChange(_ textView: UITextView) {
     let fixedWidth = textView.frame.size.width
     let newSize = textView.sizeThatFits(CGSize(width: fixedWidth, height: CGFloat.greatestFiniteMagnitude))
     textView.frame.size = CGSize(width: max(newSize.width, fixedWidth), height: newSize.height)

}

当我输入第一个字符时,它不会调整字符的宽度。我尝试的另一个解决方案是这个。

 func textViewDidChange(_ textView: UITextView) {
     let fixedWidth = textView.frame.size.width
     let newSize = textView.sizeThatFits(CGSize(width: fixedWidth, height: CGFloat.greatestFiniteMagnitude))
     textView.frame.size = CGSize(width: newSize.width, height: newSize.height)

}

使用此解决方案,它的宽度卡在第一个字符上,每行只有一个字符。我该如何解决这个问题?

【问题讨论】:

  • 检查这是否有帮助 stackoverflow.com/questions/51731451/…
  • 这是因为在sizeThatFits 方法中,您告诉它的最大宽度是当前宽度,因此它只是适应高度。您是否试图让它水平扩展,直到某个点然后垂直扩展?
  • 使用Textview的高度限制可以做到这一点。
  • 在调整 textview self.view.layoutIfNeeded() 大小后添加这一行。
  • @UpholderOfTruth 是的,-Rakesha Shastri 不,谢谢,-KKRocks 如何使用约束来做到这一点?

标签: ios swift xcode uitextview


【解决方案1】:

试试这个:

    let maximumWidth: CGFloat = 200 // Change as appropriate for your use.
    let newSize = textView.sizeThatFits(CGSize(width: maximumWidth, height: CGFloat.greatestFiniteMagnitude))
    textView.frame.size = CGSize(width: newSize.width, height: newSize.height)

您需要想出一种方法来确定最大宽度,因为我现在刚刚对其进行了硬编码。

这会将UITextView 水平扩展至 200 点,然后开始垂直扩展。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-09-29
    • 1970-01-01
    • 2012-06-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-12-28
    • 2014-08-24
    相关资源
    最近更新 更多