在UItextview上设置dynamic高度以编程方式适应内容

只是通过编程编码,我试图实现像下面的图像。 TextView和ContainerViewembedded在滚动视图中,虽然它没有显示在图像中。

在这里输入图像说明

这是我的代码。

override func viewDidLoad() { super.viewDidLoad() let margin = CGFloat(10) textView = UITextView() textView.text = "asdadaasdadadadasdadadadasdadadadasdadadadasdadadadasdadadadasdadadadasdadadadasdadadadasdadadadasdadadadasdadadadasdadadadasdadadadasdadadadaadasdadadadasdadadadasdadadadasdadadadasdadadadasdadadadasdadadadasdadadadasdadadadasdadadadasdadadadasdadadadasdadadaddadd" let contentSize = textView.sizeThatFits(textView.bounds.size) textView.frame = CGRectMake(margin, 0, self.view.frame.width - 2 * margin, contentSize.height) let scrollView = UIScrollView(frame: CGRect(x: 0, y: 0, width: self.view.frame.width, height: self.view.frame.height - 50)) let containerView = UIView(frame: CGRectMake(margin, contentSize.height + margin, self.view.frame.width - 2 * margin, self.view.frame.height)) let button1 = UIButton(frame: CGRectMake(margin, contentSize.height + containerView.frame.height + 2 * margin, (view.frame.width - 2 * margin)/2, 30)) scrollView.contentSize = CGSize(width: self.view.frame.width, height: button1.frame.origin.y + button1.frame.height + margin) self.view.addSubview(scrollView) scrollView.addSubview(textView) scrollView.addSubview(containerView) scrollView.backgroundColor = UIColor.blueColor() containerView.backgroundColor = UIColor.yellowColor() textView.backgroundColor = UIColor.greenColor() } 

问题是textview的高度不是dynamic的,以显示textview中的所有内容。

我已经确认,如果我在viewdidappear中添加下面的代码,它确实使textview的高度dynamic,但它堆叠在容器视图下,因为下面的代码在ViewDidLoadconfiguration完毕后运行。

 let contentSize = textView.sizeThatFits(textView.bounds.size) textView.frame = CGRectMake(margin, 0, self.view.frame.width - 2 * margin, contentSize.height) 

这种问题最好的办法是什么? 我认为这是由于渲染顺序viewdidload,但我不是100%肯定。 如果有人可以谈论渲染顺序,那将会很棒。

为了回答最初的问题,您对sizeThatFits的调用不知道TextView应该有多高,因为它不知道你想要多大。 我想在sizeThatFits行之前你想要以下内容:

 textView.frame.size.width = self.view.frame.width - 2 * margin