0

Я создал программный (без Story Board или Interface Builder) собственный подкласс UITableViewController под названием FooTableViewController.UITextView tableHeaderView Внутренняя высота

В viewDidLoad, я поставил tableView.tableHeaderView к нередактируемому UITextView с произвольной высотой 200 и с его text набора для случайного String.

UITextView автоматически обновляет свою ширину при повороте устройства. Как мне получить его, чтобы автоматически обновлять его высоту, когда я устанавливаю его text (так, чтобы он точно содержал его text)?

Примечание: Я использую uneditable UITextView вместо UILabel, потому что я хочу, чтобы пользователь мог выбирать и копировать текст.

ответ

0

Ниже приведены соответствующие методы экземпляра FooTableViewController.

// MARK: - UIViewController 

override func viewDidLoad() { 
    super.viewDidLoad() 
    let textView = UITextView(frame: CGRect.zero, textContainer: nil) 
    textView.editable = false 
    textView.font = .systemFontOfSize(17) 
    textView.scrollEnabled = false 
    textView.scrollsToTop = false 
    textView.text = "Random long string" 
    textView.textContainerInset = UIEdgeInsets(top: 15, left: 12, bottom: 25, right: 12) 
    tableView.tableHeaderView = textView 
} 

override func viewWillAppear(animated: Bool) { 
    super.viewWillAppear(animated) 
    updateTableHeaderViewHeightForWidth(view.frame.width) 
} 

// MARK: - UIContentContainer 

override func viewWillTransitionToSize(size: CGSize, withTransitionCoordinator coordinator: UIViewControllerTransitionCoordinator) { 
    super.viewWillTransitionToSize(size, withTransitionCoordinator: coordinator) 
    coordinator.animateAlongsideTransition({ _ in self.updateTableHeaderViewHeightForWidth(size.width) }, completion: nil) 
} 

// MARK: - Helpers 

func updateTableHeaderViewHeightForWidth(width: CGFloat) { 
    let textView = tableView.tableHeaderView! 
    let oldHeight = textView.frame.height 
    let newHeight = textView.sizeThatFits(CGSize(width: width, height: CGFloat.max)).height 
    textView.frame.size.height = newHeight 
    tableView.contentSize.height += newHeight - oldHeight 
}