【发布时间】:2023-03-17 23:40:01
【问题描述】:
我正在使用自动布局。
- 我正在从 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 相同
标签: ios objective-c swift xcode autolayout