0

嘿,所以我有一个UITextView内部UIView,我动态加载内容。我正在使用此解决方案调整文本视图的高度

我关闭了自动布局以使其正常工作(其他解决方案,例如sizeToFit()不使用自动布局开启)但是当我这样做时,即使文本视图的所有内容都被渲染,它也会溢出它包含的边界UIView

我尝试使用同样适用于其容器上的文本视图的解决方案,但这并没有做任何事情。

似乎确实有效的一件事是:

newFrame = containerView.frame
newFrame.size.height = textView.frame.size.height
containerView.frame = newFrame

但这不是我需要的,因为我在这个容器视图中也会有几个标签,所以它的高度不能与文本字段的高度相同。

有没有办法在不再次打开自动布局的情况下解决这个问题?(打开自动布局会有帮助吗?)如果打开自动布局可以解决这个问题,那么有没有办法保持文本视图的动态大小(因为打开它会破坏它)?

我对此很陌生。感谢帮助。

哦,我实际上正在开发一个 tvOS 应用程序,而不是 iOS 应用程序。不知道这是否有所作为。

编辑:

这是实际的代码:

@IBOutlet weak var container: UIView!
@IBOutlet weak var label: UILabel!
@IBOutlet weak var text: UITextView!

override func viewDidLoad() {
    super.viewDidLoad()

    print(text.frame.origin.x, text.frame.origin.y)

    text.scrollEnabled = false

    text.text = "bla blah blah blah boo boo boo boooooo boo blah yo yo yo yo yo hello"
    let fixedWidth = text.frame.size.width
    let newSize = text.sizeThatFits(CGSize(width: fixedWidth, height: CGFloat.max))
    var newFrame = text.frame
    newFrame.size = CGSize(width: max(newSize.width, fixedWidth), height: newSize.height)
    text.frame = newFrame
}

这会在内容更改时动态扩展文本视图。添加:

newFrame = containerView.frame
newFrame.size.height = textView.frame.size.height
containerView.frame = newFrame

调整容器的大小UIView,但text.frame.origin.y将文本视图设为 0。因此,将任何其他元素添加到容器中只会与文本视图重叠。

4

1 回答 1

0

您可以通过自动布局或框架来实现这一点。如果您使用框架,那么您需要考虑容器视图中所有其他组件的高度。假设您有 3 个标签,1 个在 textview 上方,2 个在其下方,有 15 个点,每个标签之间有垂直距离,那么您的 containerView 高度应该是:

newFrame = containerView.frame
newFrame.size.height = 15 + label1.frame.size.height + 15 + textView.frame.size.height + 15 + label2.frame.size.height + 15 + lable3.frame.size.height + 15
containerView.frame = newFrame

使用自动布局,您必须在组件之间设置适当的垂直约束以相应地调整大小。

于 2016-04-26T10:58:03.630 回答