UITextView is not scrolled to top when loaded

Michael Campsall picture Michael Campsall · Jan 20, 2015 · Viewed 19.2k times · Source

When I have text that does not fill the UITextView, it is scrolled to the top working as intended. When there is more text than will fit on screen, the UITextView is scrolled to the middle of the text, rather than the top.

Here are some potentially relevant details:

In viewDidLoad to give some padding on top and bottom of UITextView:

self.mainTextView.textContainerInset = UIEdgeInsetsMake(90, 0, 70, 0);

The UITextView uses auto layout to anchor it 20px from top, bottom and each side of the screen (done in IB) to allow for different screen sizes and orientations.

I can still scroll it with my finger once its loaded.

EDIT I found that removing the auto layout constraints and then fixing the width only seems to fix the issue, but only for that screen width.

Answer

Muhammad Ibrahim picture Muhammad Ibrahim · Dec 13, 2015

add the following function to your view controller class...

Swift 3

override func viewDidLayoutSubviews() {
    self.mainTextView.setContentOffset(.zero, animated: false)
}

Swift 2.1

override func viewDidLayoutSubviews() {
    self.mainTextView.setContentOffset(CGPointZero, animated: false)
}

Objective C

- (void)viewDidLayoutSubviews {
    [self.mainTextView setContentOffset:CGPointZero animated:NO];
}