IT

UIScrollView의 가로 스크롤을 사용하는 방법은 무엇입니까?

lottoking 2020. 9. 15. 07:59
반응형

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)

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


제 경우에는 contentView의 너비가 UIScrollView의 너비보다 커서 않는 가로 스크롤의 원인이 있습니다. contentView의 너비를 UIScrollView의 너비와 동일하게 설정하여 해결했습니다.

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


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

수직 스크롤 :

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

수평 스크롤 :

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

UIScrollView를 하나의 셀만있는 UITableView로 바꾸면 작동했습니다.


viewDidLoad (아래와 같이)에 tableview contentInset이 설정되어 수평 스크롤의 원인이됩니다.

self.tableView.contentInset = UIEdgeInsetsMake(0, 30, 0, 0);

다른 이유로 설정된 tableview contentInset이 있는지 확인하고 비활성화하십시오.


나는 이것과 다른 스레드의 다양한 제안을 실패로 시도하면서 얼마 동안 이것으로 어려움을 겪었습니다.

그러나 다른 스레드 (어디에서 확실하지 않음)에서 누군가가 UIScrollView에 부정적인 제약 조건을 사용하는 것이 효과적이라고 제안했습니다.

그래서 저는 일관성없는 결과를 가진 다양한 제약 조합을 시도했습니다. 결국 나를 위해 일한 것은 -32의 선행 및 후행 제약 조건을 스크롤 뷰에 추가하고 너비가 320 (및 가운데) 인 (보이지 않는) 텍스트 뷰를 추가하는 것이 었습니다.


이 시도:

CGSize scrollSize = CGSizeMake([UIScreen mainScreen].bounds.size.width, scrollHeight);
[scrollView setContentSize: scrollSize];

이 한 줄을 사용하십시오.

self.automaticallyAdjustsScrollViewInsets = NO;

참고 URL : https://stackoverflow.com/questions/1062693/how-to-disable-horizontal-scrolling-of-uiscrollview

반응형