[iphone] 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;