我以编程方式(不使用Story Board或Interface Builder)创建了一个名为FooTableViewController
的UITableViewController
自定义子类。
在viewDidLoad
中,我将tableView.tableHeaderView
设置为一个不可编辑的UITextView
,高度为任意的200
,其text
设置为随机的String
。
当我旋转设备时,UITextView
会自动更新其宽度。当我设置它的text
(这样它就包含了它的text
)时,我如何让它自动更新它的高度?
注意:我使用不可编辑的UITextView
而不是UILabel
,因为我希望用户能够选择和复制文本。
发布于 2016-08-28 01:59:19
下面是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
}
https://stackoverflow.com/questions/39186707
复制相似问题