如何根据 UITextView 动态调整 xib 的大小
Posted
技术标签:
【中文标题】如何根据 UITextView 动态调整 xib 的大小【英文标题】:How to dynamically resize xib according to UITextView 【发布时间】:2017-07-17 17:24:46 【问题描述】:我正在使用自动布局。
我正在从 xib 加载UIView
。
除UITextView
之外的所有元素都具有静态大小。
我已禁用 UITextView 上的滚动
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
+ 所有其他元素 + 约束的大小。
我尝试了不同的方法来实现这一点,但都没有帮助。我试过的:
以不同方式设置约束 强制调用 layoutSubviews() 并检查结果 UIView 的大小 在 viewDidLayoutSubviews 之后检查 UIView 的大小translatesAutoresizingMaskIntoConstraints = true
与 autoresizingMask = .flexibleHeight
这样的想法可以实现吗?
【问题讨论】:
你需要一个 UITextView 吗?你需要有用户输入吗?如果不是这样,你最好使用 UILabel。 @Fogmeister 不,我并不完全需要 UITextView,你认为 UILabel 会帮助 UIView 从 xib 调整大小吗? UITextView 被设计为在它包含的文本太大时滚动。文本视图的大小与其中的文本大小无关。使用 UIlabel,标签的固有大小是文本的大小,它应该调整视图的大小。 @Fogmeister 我已经在 UITextView 上禁用了滚动功能,因此在固有尺寸的情况下它的工作方式与 UILabel 相同 尝试使用此代码collindonnell.com/2015/09/29/… 【参考方案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
【讨论】:
以上是关于如何根据 UITextView 动态调整 xib 的大小的主要内容,如果未能解决你的问题,请参考以下文章