iphoneobjective-ciosxcodeuitextview

Center text vertically in a UITextView


I want to center the text vertically inside a big UITextView that fills the whole screen - so that when there's little of text, say a couple of words, it is centered by height. It's not a question about centering the text (a property that can be found in IB) but about putting the text vertically right in the middle of UITextView if the text is short, so there are no blank areas in the UITextView. Can this be done?


Solution

  • First add an observer for the contentSize key value of the UITextView when the view is loaded:

    - (void) viewDidLoad {
         [textField addObserver:self forKeyPath:@"contentSize" options:(NSKeyValueObservingOptionNew) context:NULL];
         [super viewDidLoad];
    }
    

    Then add this method to adjust the contentOffset every time the contentSize value changes:

    -(void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary *)change context:(void *)context {
         UITextView *tv = object;
         CGFloat topCorrect = ([tv bounds].size.height - [tv contentSize].height * [tv zoomScale])/2.0;
         topCorrect = ( topCorrect < 0.0 ? 0.0 : topCorrect );
         tv.contentOffset = (CGPoint){.x = 0, .y = -topCorrect};
    }