Programing

UIScrollView에서 세로 스크롤 비활성화

crosscheck 2020. 9. 20. 08:48
반응형

UIScrollView에서 세로 스크롤 비활성화


IB에는 scrollview에서 수직 스크롤을 선택 취소하는 옵션이 있지만 작동하지 않는 것 같습니다.

IB가 아닌 코드에서 가로로만 스크롤하지 않고 세로로만 스크롤하도록 scrollview를 설정하는 방법은 무엇입니까?


contentSize의 높이를 scrollView의 높이로 설정하십시오. 그런 다음 수직으로 스크롤 할 것이 없으므로 수직 스크롤을 비활성화해야합니다.

scrollView.contentSize = CGSizeMake(scrollView.contentSize.width,scrollView.frame.size.height);

iOS7 이후 :

첫째 : 콘텐츠 크기 너비는 스크롤 뷰의 너비와 같아야합니다.

두 번째 : initWithNibName :

self.automaticallyAdjustsScrollViewInsets = NO;

그게 다야.


예, pt2ph8의 대답이 맞습니다.

하지만 이상한 이유로 contentSize가 UIScrollView보다 높아야하는 경우 UIScrollView 프로토콜 메서드를 구현하는 세로 스크롤을 비활성화 할 수 있습니다.

 -(void)scrollViewDidScroll:(UIScrollView *)aScrollView;

UIViewController에 이것을 추가하십시오.

float oldY; // here or better in .h interface

- (void)scrollViewDidScroll:(UIScrollView *)aScrollView
{
    [aScrollView setContentOffset: CGPointMake(aScrollView.contentOffset.x, oldY)];
    // or if you are sure you wanna it always on top:
    // [aScrollView setContentOffset: CGPointMake(aScrollView.contentOffset.x, 0)];
}

사용자가 UIScrollView를 스크롤 할 때 호출되는 메서드 일 뿐이며 이렇게하면 콘텐츠가 항상 동일한 .y를 갖도록 강제합니다.


다음 방법 포함

-(void)viewDidLayoutSubviews{
    self.automaticallyAdjustsScrollViewInsets = NO;
}

스크롤 뷰의 콘텐츠 크기 너비를 스크롤 뷰의 너비와 동일하게 설정합니다.


원하는 방향으로 비활성화하려면 콘텐츠 크기에 0을 전달해야합니다.

세로 스크롤을 비활성화하려면

scrollView.contentSize = CGSizeMake(scrollView.contentSize.width,0);

가로 스크롤을 비활성화하려면

scrollView.contentSize = CGSizeMake(0,scrollView.contentSize.height);

콘텐츠 크기를 업데이트하여 세로 스크롤을 비활성화했지만 스크롤 기능은 여전히 ​​유지되었습니다. 그런 다음 스크롤을 완전히 비활성화하려면 세로 바운스도 비활성화해야한다는 것을 알았습니다.

이 문제를 가진 사람들도있을 것입니다.


- (void)scrollViewDidScroll:(UIScrollView *)aScrollView
{
    [aScrollView setContentOffset: CGPointMake(aScrollView.contentOffset.x,0)];

}

당신은 확인해야합니다 UIScrollViewDelegate

aScrollView.delegate = self;

iOS 11에서 안전 영역이 아닌 화면 경계에 고정되는 스크롤 뷰를 만드는 데 관심이 있다면 다음을 추가하는 것을 잊지 마십시오. :

if (@available(iOS 11.0, *)) {
    [self.scrollView setContentInsetAdjustmentBehavior:UIScrollViewContentInsetAdjustmentNever];
}

Just set the y to be always on top. Need to conform with UIScrollViewDelegate

func scrollViewDidScroll(scrollView: UIScrollView) {
        scrollView.contentOffset.y = 0.0
}

This will keep the Deceleration / Acceleration effect of the scrolling.

참고URL : https://stackoverflow.com/questions/5095713/disabling-vertical-scrolling-in-uiscrollview

반응형