Показать прокручиваемый элемент Objective-C - PullRequest
0 голосов
/ 09 октября 2018

Для моего приложения у меня есть UITextView, и мне нужно отображать стрелку, когда есть прокручиваемый контент.

Изображение должно быть скрыто, когда вы внизу или когда вы не можете прокрутитьtext.

- (void)scrollViewDidScroll:(UIScrollView *)scrollView {

   self.scrollableItem.hidden = YES;
   float scrollViewHeight = scrollView.frame.size.height;
   float scrollContentSizeHeight = scrollView.contentSize.height;
   float scrollOffset = scrollView.contentOffset.y;

   if (scrollOffset > 0 && scrollOffset <= scrollViewHeight / 2) {
    self.scrollableItem.hidden = NO;
   } else if (scrollOffset <= 0 && scrollContentSizeHeight >= scrollViewHeight) {
    self.scrollableItem.hidden = NO;
   }
}

Пока это работает приблизительно, но я хотел бы знать, есть ли более общий способ?

Спасибо

1 Ответ

0 голосов
/ 09 октября 2018

Вы на правильном пути.Нам просто нужна формула для описания желаемого условия: текста больше, чем уместится, и этот текст простирается ниже нижней части вида

- (void)scrollViewDidScroll:(UIScrollView *)scrollView {
    if (scrollView != self.textView) return;
    [self updateScrollableItem:(UITextView *)scrollView];
}

- (void)textViewDidChange:(UITextView *)textView {
    [self updateScrollableItem:textView];
}

- (void)updateScrollableItem:(UITextView *)textView {
    CGSize contentSize = textView.contentSize;
    CGSize boundsSize = textView.bounds.size;
    CGFloat contentOffsetY = textView.contentOffset.y;

    BOOL excess = contentSize.height > boundsSize.height;
    // notice the little fudge to make sure some portion of a line is above the bottom
    BOOL bottom = contentOffsetY + textView.font.lineHeight * 1.5 > contentSize.height - boundsSize.height;

    self.scrollableItem.hidden = !excess || bottom;
}

Выдумка обусловлена ​​тем фактом, что высота вида не может бытьцелое кратное высоты строки для данного шрифта.Немного больше, чем линия, кажется, добивается цели.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...