gpt4 book ai didi

swift - 单击按钮时继续在 ScrollView 中添加动态高度 TextView

转载 作者:行者123 更新时间:2023-11-30 11:36:21 25 4
gpt4 key购买 nike

我正在准备一个表单,其中我们必须在每次单击按钮时添加 UI TextView 。当键入文本时,该 TextView 必须增加其高度,并且 ScrollView 应相应地增加其内容大小。我尝试使用 UITableView 来实现此目的,并启用滚动 = false 并将 TextView 放置在单元格内,并启用滚动 = false。现在,我试图增加表格 View 和 ScrollView 的内容大小,并在每次单击按钮时添加新单元格,但无法这样做。有人能帮忙吗 ?

var notesArray = [String]()

func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
if notesArray.count == 0{
return 1
}else{
return notesArray.count
}
}

public func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {

let cell : AddAssetCell = tableView.dequeueReusableCell(withIdentifier: "AddAssetCell", for: indexPath) as! AddAssetCell
cell.contentView.isUserInteractionEnabled = true
cell.txtView.delegate = self
if notesArray.count > 0{
cell.txtView.text = notesArray[indexPath.row]
}
return cell
}

func textViewDidChange(_ textView: UITextView) {

let startHeight = textView.frame.size.height
let calcHeight = textView.sizeThatFits(textView.frame.size).height
if startHeight != calcHeight {

UIView.setAnimationsEnabled(false) // Disable animations
self.tableViewNotes.beginUpdates()
self.tableViewNotes.endUpdates()

let scrollTo = self.tableViewNotes.contentSize.height - self.tableViewNotes.frame.size.height
self.tableViewNotes.setContentOffset(CGPoint(x : 0, y : scrollTo), animated: false)
contraintHeightTblViewNotes.constant = self.tableViewNotes.contentSize.height
self.scrollViewAddAsset.contentSize.height = self.scrollViewAddAsset.contentSize.height + scrollTo
UIView.setAnimationsEnabled(true) // Re-enable animations.
}
}

//MARK: - Text View Delegates
func textViewDidBeginEditing(_ textView: UITextView) {
if textView.textColor == UIColor.lightGray {
textView.text = nil
textView.textColor = UIColor.black
}
}
func textViewDidEndEditing(_ textView: UITextView) {
if textView.text.isEmpty {
textView.text = "Notes"
textView.textColor = UIColor.lightGray
}else{
if notesArray.count > 0 {
notesArray.insert(textView.text, at: notesArray.count - 1)
}else{
notesArray.append(textView.text)
}
}
}

@IBAction func btnAddMoreAction(_ sender: Any)
{

notesArray.append("")
tableViewNotes.reloadData()
}

最佳答案

好吧,我们来谈谈 UITableView 中的自调整大小 Cell,如果你还不知道,这里有一个清晰的教程 https://www.raywenderlich.com/129059/self-sizing-table-view-cells

它让你的 UITableView 在摘要中自动增长单元格高度。所以下一个挑战是 UITextViewDelegate,这是我在面对 Self-Sizing UITextView 时最喜欢的解决方案:

func textViewDidBeginEditing(_ textView: UITextView) {
if textView === txtDescription, textView.text == txtDescripttionPlaceHolder {
textView.text = nil
textView.selectedRange = NSMakeRange(0, 0)
}
}

func textView(_ textView: UITextView, shouldChangeTextIn range: NSRange, replacementText text: String) -> Bool {
let newLenght = textView.text.count + text.count - range.length
if textView === txtDescription, textView.text == txtDescripttionPlaceHolder, newLenght > 0 {
if text.count == 0 {
return false
}
textView.text = nil
}
return true
}

func textViewDidChange(_ textView: UITextView) {
if textView === txtDescription {
resizeTxtDescription()
}
}

func textViewDidEndEditing(_ textView: UITextView) {
if textView == txtDescription {
textView.text.trimNewlinesAndWhitespaces()
textView.text = textView.text.count > 0 ? textView.text : txtDescripttionPlaceHolder
resizeTxtDescription()
}
}

private func resizeTxtDescription() {
let fixedWidth = self.txtDescription.frame.size.width
self.txtDescription.sizeThatFits(CGSize(width: fixedWidth, height: CGFloat.greatestFiniteMagnitude))
let newSize = txtDescription.sizeThatFits(CGSize(width: fixedWidth, height: CGFloat.greatestFiniteMagnitude))

UIView.animate(withDuration: 0.5) { [weak self] in
self?.txtDescriptionHeightConstraint.constant = newSize.height
self?.view.setNeedsLayout()
self?.view.layoutIfNeeded()
}
}

设置 UITableViewCell 后,在我的情况下声明一个约束来保持 UITextView 高度,就像 txtDescriptionHeightConstraint 一样,因此您可以通过更改约束的常量来更改 UITextView 高度。

关于swift - 单击按钮时继续在 ScrollView 中添加动态高度 TextView ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49726623/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com