2013-11-04 7 views
11

UIScrollViewUITextViewUIImageView 오브젝트가 이미 추가 된 인터페이스 빌더에 생성되었습니다. 나는 그것이 IBOutlet에 연결되어 있고 -(void)viewDidLoad 아래에 나는 내용물 크기를 1200x2000으로 설정했다. 사용자 상호 작용 사용, 멀티 터치, 스크롤링 사용 및 세로 및 가로 스크롤 표시기가 모두 YES으로 설정되어 있음을 보여줍니다. iOS 시뮬레이터에서 앱을 실행하면 스크롤하지 않습니다. 이 행동의 원인은 무엇일까요?UIScrollView가 스크롤되지 않습니까?

+0

는 초기화 코드를 게시? –

+0

초기화 코드가 없으므로 UIScrollView가 IB에 의해 자동 초기화됩니다. 코드에 따라 scrollView – 68cherries

+0

의 contentSize 속성을 설정하고 UIScrollView 대리자 메서드를 확인하여 UIScrollView가 실제로 터치 이벤트를 얻고 있는지 또는 다른 뷰가 실제로 모든 이벤트를 먹고 있는지 확인합니다.g scrollViewWillBeginDragging : – Dinesh

답변

19
  1. viewDidLoad가 곧 있습니다. 뷰의 레이아웃이 완료 될 때까지 기다려야합니다. viewDidAppear에서 contentSize를 설정해보십시오.

  2. autolayout을 사용하고 있습니까? 그렇다면 다음 답변을 확인하십시오 (그리고 잊지 1.) : UIScrollView doesn't use autolayout constraints.

+0

첫 번째 시도했지만 도움이되지 않았습니다. 나는 다른 답변을 체크 아웃하고 이것을 구현하는이 빠른 코드를 작성했습니다.'- (void) viewDidLoad { // 뷰를로드 한 후 추가 설정을 수행하십시오. _mainScrollView.contentSize = CGSizeMake (4000, 4000); for (int i = 0; i <_mainScrollView.subviews.count; i ++) { UIView * newSubview = [_ mainScrollView.subviews objectAtIndex : i]; newSubview.translatesAutoresizingMaskIntoConstraints = NO; } [super viewDidLoad]; } – 68cherries

+0

@Nenad M : 왜 1 번을 잊어 버리시겠습니까? 순수한 자동 레이아웃 접근법은 여전히'contentSize'를 설정하는 것을 요구합니다. 아마도 당신이 혼합 된 접근법을 취하면 그럴 필요는 없지만 아직 시도하지 않았습니다. – testing

+0

@ timquinn : 비밀은 무엇입니까? 하나의 비밀은 [이 대답] 인 것 같습니다 (http://stackoverflow.com/a/16029013/426227). – testing

8

내가 코드를 작성하는 의지하지 않고이 문제를 해결하는 방법을 알고 가장 좋은 방법은 모두 스토리 보드 범위 내에서 실시 할 수 있다는 것입니다 여기에 방법입니다

  1. 남기기 자동 레이아웃이 가능.
  2. 일반 UIView를 UIScrollView의 하위보기로 만듭니다. 2.1)보기 구성 요소를 모두이 일반 UIView에 배치합니다.
  3. 하위 뷰와 UIScrollView간에 자동 평면 제한을 설정합니다. 마지막 하위 뷰의 오른쪽 및/또는 아래쪽을 UIScrollView의 오른쪽 및/또는 아래쪽에 고정해야합니다. UIScrollView가 내용 크기를 인식하는 방법입니다.
+0

정말 고마워요! 이것은 iOS 7에서 UIScrollView를 사용하여 작업 한 유일한 방법입니다. Autolayout을 사용하여 가로로 조경하십시오 !!!!!!! :) 위로 엄지! –

4

실제로 너무 이르지만 viewDidAppear:animated도 충분히 늦지 않을 수 있습니다. contentOffset을 설정하는 가장 좋은 장소는 viewDidLayoutSubviews입니다. 당신이 자동 레이아웃을 사용하는 경우

3

, 당신은 풀 기능을 새로 고침, 나는이있는 UIScrollView에서 사용자 정의보기를 사용

viewDidLayoutSubviews 
0

내 컨텐츠 크기를 설정하는 코드를 넣어 있는지 확인하고 스크롤 뷰는 아니다 스크롤 가능. 나는 contentSizeAutoLayout으로 설정하고 코드로도 설정해보십시오. 스크롤 뷰는 여전히 스크롤 할 수 없습니다.

3 ~ 4 시간을 소비 한 후 contentInset으로 해결합니다. 스크롤 뷰는 스크롤을위한 추가 공간을 추가하도록 지시합니다.

override func viewDidLayoutSubviews() { 
    // Add extra 15pt on the `top` of scrollView. 
    //self.scrollView.contentInset = UIEdgeInsetsMake(15, 0, 0, 0) 

    // Add extra 2pt on the `bottom` of scrollView, let it be scrollable. And the UI is more beautiful in my case. 
    self.scrollView.contentInset = UIEdgeInsetsMake(0, 0, 2, 0) 
} 

참조 문서는 :

관련 문제