Я не полностью понимаю scrollRectToVisible, когда я использую contentInset - PullRequest
7 голосов
/ 22 марта 2012

Я добавил очень большой текст в UItextView.Мое начальное смещение -55.Затем я прокрутил до конца UITextView.Мое смещение составляет 406.

Затем я вызвал scrollToZero.Мое смещение -55.Я снова вызвал scrollToZero, и мое смещение равно 0. Почему scrollToZero настолько непредсказуем?Я не понимаю, почему смещение изменилось при повторном нажатии.

-(void) viewDidLoad
{
 [super viewDidLoad];
 textView.text = @"Very big text";
 textView.contentInset = UIEdgeInsetsMake(55.0, 0, 0, 0);
 [textView scrollRectToVisible:CGRectMake(0,0,1,1) animated:NO];
}

-(IBAction) scrollToZero:(id)sender
{
 [textView scrollRectToVisible:CGRectMake(0, 0, textView.frame.size.width, textView.frame.size.height) animated:NO];
}
-(IBAction) onLog:(id)sender
{
 NSLog(@"___content offset %f", textView.contentOffset.y);
}

1 Ответ

8 голосов
/ 23 марта 2012

Я боролся с этой самой проблемой. Я убежден, что это ошибка в классе UIScrollView, другого объяснения я не вижу.

Сначала установите ваши вкладки на ноль, вызовите scrollRectToVisible: animated:, а затем восстановите ваши вкладки. Это имеет значение только в том случае, если прямоугольник с прокруткой расположен слева от текущего прямоугольника. «право на» работает как положено.

CGRect rect = self.scrollView.bounds;
CGRect scrollToRect = CGRectOffset(rect, scrollDelta, 0);

if (CGRectIsLeftOfRect(scrollToRect, rect)) {
    UIEdgeInsets insets = self.carouselView.contentInset;
    self.scrollView.contentInset = UIEdgeInsetsZero;
    [self.scrollView scrollRectToVisible:scrollToRect animated:animated];
    self.scrollView.contentInset = insets;
} else {
    [self.scrollView scrollRectToVisible:scrollToRect animated:animated];
}
...