0

UITableViewControllerプログラムで (ストーリー ボードや Interface Builder を使用せずに)という名前のカスタム サブクラスを作成しましたFooTableViewController

では、任意の高さのuneditableにviewDidLoad設定し、その設定を randomに設定しました。tableView.tableHeaderViewUITextView200textString

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

注:ユーザーがテキストを選択してコピーできるようにするため、 aUITextViewではなくuneditable を使用しています。UILabel

4

1 に答える 1

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
}
于 2016-08-28T01:59:18.580 に答える