나는 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
}
위의 코드는 x
및 y
의 변경을 방지하고 메서드 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의 너비와 동일하게 설정하여 해결했습니다.
누군가에게 도움이되기를 바랍니다.