【发布时间】:2016-02-06 03:18:58
【问题描述】:
仅通过编程编码,我正在尝试实现如下图所示的效果。 TextView 和 ContainerView 嵌入在滚动视图中,虽然它没有显示在图像中。
这是我的代码。
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 的高度不是动态的,无法在 textview 中显示所有内容。
我已经确认,如果我在 viewdidappear 中添加下面的代码,它确实会使 textview 的高度动态化,但它堆叠在 Container 视图下,因为下面的代码在 ViewDidLoad 配置完所有内容后运行。
let contentSize = textView.sizeThatFits(textView.bounds.size)
textView.frame = CGRectMake(margin, 0, self.view.frame.width - 2 * margin, contentSize.height)
解决此类问题的最佳方法是什么? 我认为这是由于 viewdidload 中的渲染顺序引起的,但我不确定 100%。如果有人也可以谈论渲染顺序,那就太好了。
【问题讨论】:
-
您是否有理由希望/需要以编程方式进行布局?这会使事情变得非常困难。为什么不直接使用约束?
-
@Dan,尝试使用约束,这比编写代码更痛苦。
标签: ios swift uitextview