iosuitextviewpadding

Add "padding" to a UITextView


as the title says i am trying to add padding-like behavior to a UITextView. The textview is generated when the view is pushed inside my navigation controller and the following code occurs:

 self.textView.layer.cornerRadius = 7;
 //pretty stuff is pretty

 NSString *description = appDelegate.productInDisplay.description;
 [self.textView setText:description];
 //pretty stuff has content now


 CGRect frame = textView.frame;
 frame.size.height = textView.contentSize.height;
 textView.frame = frame;
 //set the UITextView to the size of it's containing text.

 self.textView.editable = NO;

  self.theScrollView.contentSize = CGSizeMake(320, 250 + textView.frame.size.height);
  //set the parent scrollView's height to fit some other elements with fixed size (250)
  //and the pre-mentioned UITextView

so, it all works and it's ok, but i want to add some padding on all 4 sides of the UITextView and i've been unable to do this with 3 hours of googling for something that seems rather easy. Any suggestions?


Solution

  • EDIT 1/16/2015: This was written in 2012 and is no longer accurate. Use -textContainerInset as mentioned above.

    Original post:

    Using contentInset won't actually work. You have two reasonable choices: subclass UITextField and override the textRectForBounds: and editingRectForBounds: methods or create your text field transparently over a UIView and style the UIView.

    Example of subclassing the UITextField:

    - (CGRect)textRectForBounds:(CGRect)bounds {
         return CGRectInset(bounds, 5, 5);
    }
    
    - (CGRect)editingRectForBounds:(CGRect)bounds {
         return CGRectInset(bounds, 5, 5);
    }
    

    Example of wrapping it in a UIView:

    UIView *wrapView = [[UIView alloc] initWithFrame: CGRectMake(10, 10, 200, 30)];
    [wrapView addSubview:textView];
    wrapView.layer.borderColor = [UIColor darkGrayColor].CGColor;
    wrapView.layer.borderWidth = 2.0;
    wrapView.layer.cornerRadius = 5.0;