3

현재 나는 40px 아래로 스크롤 할 때 UINavigation 톱 바를 숨기는 UICollection입니다. 상단으로 다시 스크롤하면 UINavigation 상단 표시 줄이 다시 나타납니다.스크롤 할 때 탐색 표시 줄 맨 위로 이동 IOS

그러나이 작품은 사용자가 상단에서 스크롤 할 때뿐만 아니라 40px 스크롤 할 때마다 UINavigation 상단 표시 줄을 표시하거나 숨길 수 있기를 원합니다.

예 : 상단에서 스크롤을 시작하면 막대가 숨겨지고 UICollectionView의 중간으로 스크롤 한 다음 위로 스크롤하여 위로 스크롤하면 UINavigation 상단 표시 줄이 다시 표시됩니다.

아이디어가 있으십니까?

#pragma mark - UIScrollViewDelegate Methods 
-(void)scrollViewDidScrollToTop:(UIScrollView *)scrollView 
{ 
if([[[UIDevice currentDevice] systemVersion] floatValue] < 7.0f){ 
    return; 
} 

CGRect frame = self.navigationController.navigationBar.frame; 
frame.origin.y = 20; 
} 

-(void)scrollViewDidScroll:(UIScrollView *)scrollView 
{ 
if([[[UIDevice currentDevice] systemVersion] floatValue] < 7.0f){ 
    return; 
} 

CGFloat offsetY = scrollView.contentOffset.y; 
CGFloat contentHeight = scrollView.contentSize.height - 300; 
if (offsetY > contentHeight - scrollView.frame.size.height) 
{ 
    [self.homePaginator fetchNextPage]; 
} 

CGRect frame = self.navigationController.navigationBar.frame; 
CGFloat size = frame.size.height - 25; 

if([scrollView.panGestureRecognizer translationInView:self.view].y < 0) 
{ 
    frame.origin.y = -size; 

    if(self.navigationController.navigationBar.items.count > 0){ 

     [UIView animateWithDuration:0.25 delay:0 options:UIViewAnimationOptionCurveEaseInOut | UIViewAnimationOptionAllowUserInteraction 
         animations:^{ 

          CGFloat navBarHeight = 25.0f; 
          CGRect frame = CGRectMake(0.0f, 0.0f, 320.0f, navBarHeight); 
          [self.navigationController.navigationBar setFrame:frame]; 
         } 
         completion:^(BOOL finished) { 

          self.navigationItem.titleView.alpha = 0; 
          self.piccingTitleIcon.alpha = 0; 
          self.navigationItem.rightBarButtonItem = nil; 

         }]; 
    } 
} 
else if([scrollView.panGestureRecognizer translationInView:self.view].y > 0) 
{ 

    [UIView animateWithDuration:0.5 delay:0 options:UIViewAnimationOptionCurveEaseInOut | UIViewAnimationOptionAllowUserInteraction 
        animations:^{ 
         CGFloat navBarHeight = 64.0f; 
         CGRect frame = CGRectMake(0.0f, 0.0f, 320.0f, navBarHeight); 
         [self.navigationController.navigationBar setFrame:frame]; 
         self.navigationItem.titleView.alpha = 1; 
         self.piccingTitleIcon.alpha = 1; 
         self.btnSearch = [[UIBarButtonItem alloc] initWithCustomView:self.searchIconButton]; 
         [self.navigationItem setRightBarButtonItem:self.btnSearch]; 
        } 
        completion:^(BOOL finished) { 

         [self performSelector:@selector(addIconsToNavBar) withObject:nil afterDelay:-1.0]; 
        }]; 
} 
} 

답변

1

시험해보세요.

- (void)scrollViewDidScroll:(UIScrollView *)scrollView { 
    CGPoint scrollOffset = scrollView.contentOffset; 
    if (scrollOffset.y >= 40) { 
     if (![self.navigationController isNavigationBarHidden]) { 
      [self.navigationController setNavigationBarHidden:YES animated:YES]; 
     } 
    } else { 
     if ([self.navigationController isNavigationBarHidden]) { 
      [self.navigationController setNavigationBarHidden:NO animated:YES]; 
     } 
    } 
} 
+1

작성자가 '사용자가 상단에서 스크롤 할 때뿐만 아니라 40px 스크롤 할 때마다'라고 요청했기 때문에이 방법은 도움이되지 않습니다. 질문을 자세히 읽으십시오. –

1

사용자가 스크롤하기 전에 시작 오프셋을 가져옵니다. 원하는

– scrollViewWillBeginDragging:(UIScrollView *)scrollView { 
    currentOffset = scrollView.contentOffset.y; 
} 

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

CGFloat scrollPos = scrollView.contentOffset.y - currentOffset; 

if(scrollPos >= 40 || scrollPos <= -40 /* or whatever the height of your toolbar is */){ 
    //Fully hide your toolbar 
    [UIView animateWithDuration:2.25 animations:^{ 
    [self.navigationController setNavigationBarHidden:YES animated:YES]; 

}]; 
} else { 
    //Slide it up incrementally, etc. 
[self.navigationController setNavigationBarHidden:NO animated:YES]; 
} 
} 
0

사람은 다음과 같은 코드를 사용할 수 있습니다이 작업을 수행 할 수있는 간단한 방법을 알고 있습니다. 쉽게하지만 난 당신이 쉽게 할 수있는 기존 프로젝트가있는 경우 UINavgationController 자신의 사용자 정의 클래스와 응용 프로그램의 탐색을 다시 작성해야 발견이 작업을 수행 할 수 있도록

이 라이브러리 ...

#pragma mark - UIScrollViewDelegate Methods 
-(void)scrollViewDidScrollToTop:(UIScrollView *)scrollView 
{ 
if([[[UIDevice currentDevice] systemVersion] floatValue] < 7.0f){ 
    return; 
} 

CGRect frame = self.navigationController.navigationBar.frame; 
frame.origin.y = 20; 
} 

-(void)scrollViewDidScroll:(UIScrollView *)scrollView 
{ 
if([[[UIDevice currentDevice] systemVersion] floatValue] < 7.0f){ 
    return; 
} 

CGFloat offsetY = scrollView.contentOffset.y; 
CGFloat contentHeight = scrollView.contentSize.height - 300; 
if (offsetY > contentHeight - scrollView.frame.size.height) 
{ 
    [self.homePaginator fetchNextPage]; 
} 

CGRect frame = self.navigationController.navigationBar.frame; 
CGFloat size = frame.size.height - 25; 

if([scrollView.panGestureRecognizer translationInView:self.view].y < 0) 
{ 
    frame.origin.y = -size; 

    if(self.navigationController.navigationBar.items.count > 0){ 

     [UIView animateWithDuration:0.25 delay:0 options:UIViewAnimationOptionCurveEaseInOut | UIViewAnimationOptionAllowUserInteraction 
         animations:^{ 

          CGFloat navBarHeight = 25.0f; 
          CGRect frame = CGRectMake(0.0f, 0.0f, 320.0f, navBarHeight); 
          [self.navigationController.navigationBar setFrame:frame]; 
         } 
         completion:^(BOOL finished) { 

          self.navigationItem.titleView.alpha = 0; 
          self.piccingTitleIcon.alpha = 0; 
          self.navigationItem.rightBarButtonItem = nil; 

         }]; 
    } 
} 
else if([scrollView.panGestureRecognizer translationInView:self.view].y > 0) 
{ 

    [UIView animateWithDuration:0.5 delay:0 options:UIViewAnimationOptionCurveEaseInOut | UIViewAnimationOptionAllowUserInteraction 
        animations:^{ 
         CGFloat navBarHeight = 64.0f; 
         CGRect frame = CGRectMake(0.0f, 0.0f, 320.0f, navBarHeight); 
         [self.navigationController.navigationBar setFrame:frame]; 
         self.navigationItem.titleView.alpha = 1; 
         self.piccingTitleIcon.alpha = 1; 
         self.btnSearch = [[UIBarButtonItem alloc] initWithCustomView:self.searchIconButton]; 
         [self.navigationItem setRightBarButtonItem:self.btnSearch]; 
        } 
        completion:^(BOOL finished) { 

         [self performSelector:@selector(addIconsToNavBar) withObject:nil afterDelay:-1.0]; 
        }]; 
} 
} 
관련 문제