只是通過編程編碼,我試圖實現類似下面的圖像。儘管圖像中沒有顯示TextView和ContainerView,但它們嵌入在滾動視圖中。在UItextview上設置動態高度,以編程方式適應內容
這裏是我的這段代碼。
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
@丹,嘗試使用約束,這比編寫代碼更痛苦。 – Kahsn