IB에는 scrollview에서 수직 스크롤을 선택 취소하는 옵션이 있지만 작동하지 않는 것 같습니다.
IB가 아닌 코드에서 가로로만 스크롤하지 않고 세로로만 스크롤하도록 scrollview를 설정하는 방법은 무엇입니까?
답변:
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를 갖도록 강제합니다.
float oldY;
위의 코드를 참조하는 것처럼 .m 파일에서 oldY 변수를 선언하지 마십시오 . 이는 애플리케이션 별 C 스타일 변수 심볼이며, 변수는 컨트롤러 클래스의 인스턴스 멤버로 선언되어야합니다.
다음 방법 포함
-(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;
많은 답변 contentOffset
에는를 0 으로 설정하는 것이 포함됩니다. scrollView 내부의 뷰를 중앙에 배치하려는 경우가있었습니다. 이것은 나를 위해 일했습니다.
public func scrollViewDidScroll(_ scrollView: UIScrollView) {
scrollView.contentOffset.y = -scrollView.contentInset.top
}