我正在使用自动布局。
UIView
。UITextView
以外,所有元素都有静态大小。ViewDidLoad()
上填充了不同大小的文本。例如,它可以是1行或7行。我使用以下方法加载此UIView:
fileprivate func setTableHeaderView() {
guard let _headerView = UINib(nibName: "TableHeaderView",
bundle: nil).instantiate(withOwner: self, options: nil)[0] as? UIView else { return }
tableView.tableHeaderView = UIView(frame:
CGRect(x: 0, y: 0, width: tableView.frame.width, height: _headerView.frame.size.height))
configureViewController() // here I set the text for UITextView
tableView.tableHeaderView?.addSubview(_headerView)
}
当我加载此UIView
时,layoutSubviews
之前和之后的高度始终相同。实际上,大小始终等于XCode的 Size Inspector 中设置的xib的初始大小。
我希望UITextView
符合文本大小,并且具有不同的xib UIView大小,这取决于UITextView
+所有其他元素+约束的大小。
我尝试了不同的方法来实现这一点,但没有一个没有帮助。我尝试了什么:
translatesAutoresizingMaskIntoConstraints = true
与autoresizingMask = .flexibleHeight
是否有可能以这种方式实现这个想法?
答案 0 :(得分:1)
尝试覆盖viewDidLayoutSubviewsMethod
override func viewDidLayoutSubviews() {
super.viewDidLayoutSubviews()
// Dynamic sizing for the header view
if let headerView = tableView.tableHeaderView {
let height = headerView.systemLayoutSizeFittingSize(UILayoutFittingCompressedSize).height
var headerFrame = headerView.frame
// If we don't have this check, viewDidLayoutSubviews() will get
// repeatedly, causing the app to hang.
if height != headerFrame.size.height {
headerFrame.size.height = height
headerView.frame = headerFrame
tableView.tableHeaderView = headerView
}
}
}