[ios] UIScrollView의 가로 스크롤을 비활성화하는 방법은 무엇입니까?

나는 UIView아이폰의 스프링 보드와 같다. UIScrollView및을 사용하여 만들었습니다 UIButtons. 스크롤 뷰에서 가로 스크롤을 비활성화하고 싶습니다. 세로 스크롤 만 원합니다. 어떻게해야합니까?



답변

contentSize속성 을 설정해야 합니다 UIScrollView. 예를 들어 UIScrollView너비가 320 픽셀 (화면 너비)이면 다음을 수행 할 수 있습니다.

CGSize scrollableSize = CGSizeMake(320, myScrollableHeight);
[myScrollView setContentSize:scrollableSize];

그러면 UIScrollView이미 모든 것을 가로로 표시 할 수 있으므로 세로로만 스크롤됩니다.


답변

업데이트 : (@EranMarom이 자신의 의견에 대해 지적한 후)

방법 에서 가로 스크롤 또는 세로 스크롤중지 할 수 있습니다 ScrollViewDelegate. 방법은 다음과 같습니다.

수평 스크롤을 중지합니다.

가로로 스크롤하려면 contentOffset.x를 늘려야합니다. 가로 방향으로 스크롤 뷰 스크롤이 중지되는 것을 방지합니다.

- (void)scrollViewDidScroll:(UIScrollView *)sender {
    sender.contentOffset.x = 0.0
}

수직 스크롤을 중지합니다.

수직으로 스크롤하려면 contentOffset.y를 늘려야합니다. 스크롤 뷰 스크롤을 세로 방향으로 중지하는 것을 방지합니다.

- (void)scrollViewDidScroll:(UIScrollView *)sender {
    sender.contentOffset.y = 0.0
}

위의 코드는 xy의 변경을 방지하고 메서드 scrollview contentOffset에서 스크롤링을 중지합니다 scrollViewDidScroll:.


답변

iOS7 사용 이후

self.automaticallyAdjustsScrollViewInsets = NO;

// 3 페이지로 페이지 스크롤러를 만듭니다.

    self.pageView = [[UIScrollView alloc] initWithFrame:CGRectMake(0, 0, self.view.frame.size.width, self.view.frame.size.height)];
    [self.pageView setContentSize:CGSizeMake(self.view.frame.size.width*3, self.view.frame.size.height)];
    [self.pageView setShowsVerticalScrollIndicator:NO];
    [self.pageView setPagingEnabled:YES];
    [self.view addSubview:self.pageView];


답변

신속한 솔루션

보기 용과 스크롤보기 용으로 하나씩 두 개의 콘센트를 만듭니다.

@IBOutlet weak var myView: UIView!
@IBOutlet weak var scrollView: UIScrollView!

그런 다음 viewDidLayoutSubviews에서 다음 코드를 추가 할 수 있습니다.

let scrollSize = CGSize(width: myView.frame.size.width,
                        height: myView.frame.size.height)
scrollView.contentSize = scrollSize

우리가 한 것은 뷰의 높이와 너비를 수집하고 그에 맞게 scrollViews 콘텐츠 크기를 설정하는 것입니다. 그러면 스크롤 뷰가 가로로 스크롤되지 않습니다.


더 많은 생각 :

CGSizeMake는 CGFloats를 사용하여 너비와 높이를 취합니다. 두 번째 매개 변수에 UIScrollViews 기존 높이를 사용해야 할 수도 있습니다. 다음과 같이 표시됩니다.

let scrollSize = CGSize(width: myView.frame.size.width,
                        height: scrollView.contentSize.height)


답변

제 경우에는 Swift로 4.2를 사용하여 다음을 사용할 수 있습니다.

수직 스크롤 비활성화 :

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

수평 스크롤 비활성화 :

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


답변

보기를 선택한 다음에서 Attributes Inspector선택을 취소 할 수 있습니다 User Interaction Enabled.


답변

제 경우에는 contentView의 너비가 UIScrollView의 너비보다 컸고 이것이 원치 않는 수평 스크롤의 이유였습니다. contentView의 너비를 UIScrollView의 너비와 동일하게 설정하여 해결했습니다.

누군가에게 도움이되기를 바랍니다.