2017-01-26 6 views
0

У меня есть TextView внутри моего TableView, и его высота должна быть увеличена в соответствии с содержанием. Я делаю это с помощью этойДинамическая высота TextView в TableView

override func viewDidLoad() { 
    super.viewDidLoad() 

    tableView.estimatedRowHeight = 70 
    tableView.rowHeight = UITableViewAutomaticDimension 
    textView.delegate = self 
    textView.text = "Lorem ipsum dolor sit amet, consectetur adipiscing elit, 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." 

} 
extension TableViewController: UITextViewDelegate { 
    func textViewDidChange(_ textView: UITextView) { 
    let currentOffset = tableView.contentOffset 
    UIView.setAnimationsEnabled(false) 
    tableView.beginUpdates() 
    tableView.endUpdates() 
    UIView.setAnimationsEnabled(true) 
    tableView.setContentOffset(currentOffset, animated: false) 
    } 
} 

TableView возникают статические клетки. Придали ограничения TextView должным образом. Моя главная проблема здесь заключается в том, что делегат textView не вызван. Я добавил контрольную точку, чтобы проверить ее.

+0

Будет надеяться, что [этот ответ] (http://stackoverflow.com/questions/ 39868532/can-i-change-height-of-uitableviewcell-real-time/39870884 # 39870884) может быть полезно для вашего случая ... –

+0

@AhmadF Но моих делегатов не звонят. – Nitesh

+0

Ну, это еще одна история :) убедитесь, что все подключено так, как должно ... –

ответ

1

При ручной настройке текста UITextView с кодом метод textViewDidChange: не вызывается. (Если у вас установлен делегат вашего текстового представления, он будет вызван, когда пользователь его отредактирует.)

Возможным обходным способом было бы вручную вызвать textViewDidChange: в любое время, когда вы редактируете текст. Например:

textView.delegate = self 
textView.text = "Lorem ipsum dolor sit amet, consectetur adipiscing elit, 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." 
self.textViewDidChange(self.textView) 

Своеобразный хаком способ сделать это, но он получает работу

Надежда это поможет вам.

Редактировать

попробовать это это для меня работу

class TableViewController: UITableViewController { 

@IBOutlet weak var textView: UITextView! 
override func viewDidLoad() { 
    super.viewDidLoad() 
    tableView.estimatedRowHeight = 70 
    tableView.rowHeight = UITableViewAutomaticDimension 
    textView.delegate = self 
    textView.text = "Lorem ipsum dolor sit amet, consectetur adipiscing elit, 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." 
    self.textViewDidChange(self.textView) 
} 

override func viewWillAppear(_ animated: Bool) { 
    super.viewWillAppear(animated) 
} 

override func didReceiveMemoryWarning() { 
    super.didReceiveMemoryWarning() 
    // Dispose of any resources that can be recreated. 
} 

override func tableView(_ tableView: UITableView, estimatedHeightForRowAt indexPath: IndexPath) -> CGFloat { 
    return 70 
} 
override func tableView(_ tableView: UITableView, heightForRowAt indexPath: IndexPath) -> CGFloat { 
    if indexPath.item == 1{//****Or index of your textView**** 
     return textView.contentSize.height; 
    } 
    return 70 

} 

} 

extension TableViewController: UITextViewDelegate { 
func textViewDidChange(_ textView: UITextView) { 
     tableView.reloadData() 
     } 
} 

Update

class TableViewController: UITableViewController { 

@IBOutlet weak var textView: UITextView! 
override func viewDidLoad() { 
    super.viewDidLoad() 
    tableView.estimatedRowHeight = 70 
    tableView.rowHeight = UITableViewAutomaticDimension 
    textView.delegate = self 
    textView.text = "Lorem ipsum dolor sit amet, consectetur adipiscing elit, 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." 
    self.textViewDidChange(self.textView) 
    tableView.reloadData() 

} 

override func viewWillAppear(_ animated: Bool) { 
    super.viewWillAppear(animated) 
} 

override func didReceiveMemoryWarning() { 
    super.didReceiveMemoryWarning() 
    // Dispose of any resources that can be recreated. 
} 

override func tableView(_ tableView: UITableView, estimatedHeightForRowAt indexPath: IndexPath) -> CGFloat { 
    return 70 
} 
override func tableView(_ tableView: UITableView, heightForRowAt indexPath: IndexPath) -> CGFloat { 
    if indexPath.item == 0{//****Or index of your textView**** 
     return textView.contentSize.height; 
    } 
    return 70 

} 

} 

extension TableViewController: UITextViewDelegate { 
func textViewDidChange(_ textView: UITextView) { 

} 

func textViewDidEndEditing(_ textView: UITextView) { 
    tableView.reloadData() 
} 
} 
+0

При этом мой делегат звонит по высоте стола, не увеличивается. – Nitesh

+0

https://drive.google.com/open?id=0B3IEvVMPx1JdWU9HckpDSlM1OGc – Nitesh

+0

Хорошо, я нашел его. вы не изменяете размер ячейки, потому что textView не является кадром изменения, а contentSize, поскольку он содержит scrollView. –

 Смежные вопросы

  • Нет связанных вопросов^_^