【问题标题】:Swift - TextView Heigth & Width change when typingSwift - 键入时 UITextView 的高度和宽度发生变化
【发布时间】:2019-05-10 21:42:01
【问题描述】:

我想在输入时调整文本视图的大小,但使用此代码我没有更改宽度。每次我将 textView 大小设置为 200。错误在哪里?请帮助我。

提前致谢

let textViewX = UITextView(frame: CGRect(x: self.view.frame.width / 2 - 100, y: self.view.frame.height / 2 - 25, width: 200, height: 50))
textViewX.isScrollEnabled = false
textViewX.clipsToBounds = false
textViewX.delegate = self
textViewX.font = UIFont.systemFont(ofSize: 25)
self.view.addSubview(textViewX)


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)
}

【问题讨论】:

  • 为我工作。我将上面的代码粘贴到一个新项目中。将第一位添加到我的 viewDidLoad 中。符合 TextViewDelegate。框架正在改变。
  • 它可以工作,但只会改变 textview 的高度。我想在打字时设置宽度,但它没有改变
  • 您的固定宽度变量不会阻止宽度增长吗?
  • 我该怎么办?
  • 我不在电脑旁。我会在今天晚些时候尝试回答。

标签: ios swift xcode uitextview


【解决方案1】:

您的问题是您通过使用sizeThatFits(:) 方法告诉newSize 它不能比fixedWidth 更宽。如果您更改代码以允许更大的宽度,您的 textView 将水平增长:

let fixedHeight = textView.frame.size.height
let newSize = textView.sizeThatFits(CGSize(width: CGFloat.greatestFiniteMagnitude, height: fixedHeight))
textView.frame.size = newSize

这允许 textView 的框架仅水平增长。要允许两者,您可以尝试这样的操作:

let maxWidth = UIScreen.main.bounds.width - 20
let maxHeight = UIScreen.main.bounds.height - 20
let newSize = textView.sizeThatFits(CGSize(width: maxWidth, height: maxHeight))
textView.frame.size = newSize
textView.center = view.center

这允许框架垂直和水平增长,保持 textView 在其父视图中居中,并将 textView 的大小限制为屏幕大小(周围有 20 pt 边框)。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-09-18
    • 1970-01-01
    • 2017-02-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多