0

FooTableViewControllerというUITableViewControllerのカスタムサブクラスをプログラムで(ストーリーボードまたはInterface Builderなしで)作成しました。 viewDidLoadUITextView tableHeaderView本来の高さ

、私は200の任意の高さでランダムStringへのtextセットで編集できないUITextViewからtableView.tableHeaderViewを設定しました。

UITextViewは、デバイスを回転すると自動的に幅が更新されます。 text(正確にはtextが含まれるように)を設定すると、その高さを自動的に更新するにはどうすればよいですか?

注:ユーザーがテキストを選択してコピーできるようにするため、UILabelの代わりに編集不可能なUITextViewを使用しています。

答えて

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 
} 
関連する問題