0

我以编程方式创建了一个名为FooTableViewController的自定义子类UITableViewController(无故事板或界面生成器)。UITextView tableHeaderView固有高度

viewDidLoad,我已经设置tableView.tableHeaderView一个不可编辑UITextView200并以其text设置的任意高度随机String

当我旋转设备时UITextView自动更新其宽度。当我设置它的text(这样它确切地包含它的text)时,如何让它自动更新其高度?

注意:我使用的是不可编辑的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 
}