显示可滚动项Objective-C

时间:2018-10-09 13:52:23

标签: objective-c scroll uitextview

对于我的应用程序,我有一个UITextView,当滚动内容时,我需要显示一个箭头。

当您位于底部或无法滚动浏览文本时,必须隐藏图像。

- (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 :(得分:1)

您在正确的轨道上。我们只需要一个描述所需条件的公式即可:文本超出了适合的范围,并且文本延伸到视图底部下方

- (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;
}

该错误是由于以下事实造成的:视图高度可能不是给定字体的行高的整数倍。似乎多于一行似乎可以解决问题。