Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

UITextView inside UIScrollView with AutoLayout

I am trying to place UITextView inside UIScrollView with AutoLayout with no luck. What I have tried is,

  • I placed UIScrollView inside the main view in Storyboard
  • I placed UITextView inside UIScrollView in Storyboard and disabled Scrolling Enabled
  • I set constraints (leading, trailing, top, bottom) on UIScrollView
  • I set constraints (top, leading, trailing, height) on UITextView
  • I created IBOutlet of height constraint of UITextView
  • I set a text (a lot of text which can cause scrolling) on UITextView in viewDidLoad()
  • I set a height constraint of UITextView with the code below. I have tried it right after setting text in viewDidLoad() and viewDidLayoutSubviews() with no luck

self.textViewHeightConstraint.constant = [self.textView sizeThatFits:CGSizeMake(self.textView.frame.size.width, FLT_MAX)].height;

UITextView is getting its height, but UIScrollView isn't. Is there anything I've missed?

like image 869
Sodbileg Gansukh Avatar asked Dec 26 '14 02:12

Sodbileg Gansukh


1 Answers

After a few days of research and getting my hands dirty with UIScrollView + UITextView + Auto Layout, I successfully got a fully working UIScrollView. I want to share my solution just in case someone might stuck on the same situation.

  1. Add UIScrollView inside the main view in Storyboard
  2. Add UIView inside the UIScrollView
  3. Add UITextView inside the UIView (the view added in step 2)
  4. Make sure "Scrolling Enabled" of UITextView is unchecked
  5. Add 4 constraints (leading, trailing, top, bottom) on UIScrollView
  6. Add 4 constraints (leading, trailing, top, bottom) on UIView (the view added in step 2)
  7. Add "Width Equally" constraint on UIView (the view added in step 2) and the main view
  8. Add 5 constraints (leading, trailing, top, bottom, height) on UITextView. After this step you shouldn't get any errors and warnings on constraints.
  9. Add UITextView height constraint IBOutlet on the ViewController. @property (nonatomic, weak) IBOutlet NSLayoutConstraint *textViewHeightConstraint; and connect it in Storyboard
  10. Change the UITextView height constraint programmatically. self.textViewHeightConstraint.constant = [self.textView sizeThatFits:CGSizeMake(self.textView.frame.size.width, CGFLOAT_MAX)].height;

After all of these 10 steps, you'll get fully working UIScrollView with UITextView inside and be happy.

like image 170
Sodbileg Gansukh Avatar answered Nov 11 '22 13:11

Sodbileg Gansukh