2016-02-06 24 views
1

只是通過編程編碼,我試圖實現類似下面的圖像。儘管圖像中沒有顯示TextView和ContainerView,但它們嵌入在滾動視圖中。在UItextview上設置動態高度,以編程方式適應內容

enter image description here

這裏是我的這段代碼。

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%確定的。如果有人可以談論渲染順序,那將會很棒。

+0

有沒有你想要一個理由/需要編程打下東西出來?這可能會讓事情變得非常困難。爲什麼不使用約束? – Dan

+0

@丹,嘗試使用約束,這比編寫代碼更痛苦。 – Kahsn

回答

1

要回答原來的問題,您致電sizeThatFits不知道TextView應該有多高,因爲它不知道你想要它有多寬。我想你想下面的sizeThatFits前行:

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

就是這樣。但是我需要在sizeThatFits之後再寫這行嗎? textView.frame = CGRectMake(margin,0,self.view.frame.width - 2 * margin,contentSize.height)我覺得我是重複寬度的一部分。有沒有更好的方法來重構這個? – Kahsn

+0

那麼真正的寬度部分重複在那裏,但其他屬性需要設置(x,y,高度)。默認情況下,x和y默認爲0,所以真的可以用textView.frame.size.height替換它= contentSize.height – Dan

相關問題