【问题标题】:UITextView last line positionUITextView 最后一行位置
【发布时间】:2021-06-19 03:12:23
【问题描述】:

我遇到了下一个问题:我有一个 UITableView,其中自定义单元格有一个 UITextView。用户开始输入后,最后一行与具有输入附件视图的键盘重叠。所以我必须计算键盘顶部和最后一行.y 位置之间的差异,并将这个值分配给tableView contentInset。 问题是如何找出文本视图最后一行的矩形或位置?

我有听键盘的普通通知:

NotificationCenter.default.addObserver(self, selector: #selector(_toggleKeyboard), name: UIResponder.keyboardWillShowNotification, object: nil)
NotificationCenter.default.addObserver(self, selector: #selector(_toggleKeyboard), name: UIResponder.keyboardWillHideNotification, object: nil)

以及我必须计算所有这些东西的下一个方法:

@objc private func _toggleKeyboard(notification: NSNotification) {
    let info = notification.userInfo as NSDictionary?
    let rectValue = info![UIResponder.keyboardFrameEndUserInfoKey] as! NSValue
    let kbSize = rectValue.cgRectValue
    let kbFrame = view.convert(kbSize, from: view.window)
    
    // val = bottom .y of last text view line
    // keyboard .top - val = diff
    // contentInsets.bottom = diff
}

【问题讨论】:

  • 你已经尝试了什么?任何可以进一步解释问题的问题的屏幕截图/视频?最初我会说它与约束和安全插入有关,但在没有更多上下文的情况下可能是各种问题。
  • 这是个好问题。请提供您的代码。
  • 当我面临类似的任务时,我依靠UITextView本身的底部。我什至把它抬高了几个点,所以在视觉上它就在键盘的顶部。
  • @PaulPeelen 我有以下布局:只有 UITextView 的表格视图单元格,具有左、上、右和下固定约束。

标签: ios swift uitableview tableview uitextview


【解决方案1】:

终于找到了解决办法:

let textPosition = textView.endOfDocument
let rect = textView.caretRect(for: textPosition)

【讨论】:

    猜你喜欢
    • 2020-06-03
    • 1970-01-01
    • 2010-12-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-10-07
    相关资源
    最近更新 更多