- (void)goToHighlightedWord {
[self ignoreAllPopovers];
// Установить вставку содержимого
UIEdgeInsets contentInset = UIEdgeInsetsMake(0, 0, self.keyboardHeight, 0);
scrollView.contentInset = contentInset;
scrollView.scrollIndicatorInsets = contentInset;
// Получаем позицию прямоугольника выделения
CFRange choiceRange = self.scriptTextView.paigeText.selection;
PGTextRange *selectedRange = [PGTextRange rangeWithCFRange:selectionRange];CGRect выделенныйRect = [self.scriptTextView firstRectForRange:selectedRange];
CGRect выделенныйRectInScrollView = [self.scrollView ConvertRect:highlightedRect fromView:self.scriptTextView];
CGFloatvisibleHeight = CGRectGetHeight(scrollView.bounds) - self.keyboardHeight;
CGFloat offsetY = ScrollView.contentOffset.y;Код: Выделить всё
// Check if the highlighted rectangle is outside the visible region if (highlightedRectInScrollView.origin.y < scrollView.contentOffset.y || CGRectGetMaxY(highlightedRectInScrollView) > scrollView.contentOffset.y + visibleHeight) { // Scroll to show the next word in the center of the visible region offsetY = CGRectGetMidY(highlightedRectInScrollView) - visibleHeight / 2.0; // Ensure the offset doesn't exceed the content size CGFloat maxOffsetY = scrollView.contentSize.height - visibleHeight; offsetY = MAX(0, MIN(maxOffsetY, offsetY)); CGFloat desiredOffset = offsetY - (scrollView.frame.size.height / 2.0f); // Adjust for content inset (if applicable) desiredOffset += scrollView.contentInset.top; NSLog(@"currentoffset %f", desiredOffset); [scrollView setContentOffset:CGPointMake(0, desiredOffset) animated:YES]; } }
Подробнее здесь: https://stackoverflow.com/questions/783 ... t-centered