2009-10-05 3 views
20

인터페이스 빌더 (많은 레이블, 버튼 등)에 모든 컨트롤이 배치되어 있습니다. 인터페이스 빌더의 스크롤보기에이 두 가지를 모두 넣으면 더 많은 공간을 확보하고 더 많은 컨트롤을 표시하기 위해 위아래로 스크롤 할 수 있습니까? 나는 이것을 프로그램 적으로해야만 하는가?Interface Builder에 UIScrollView를 추가하는 방법은 무엇입니까?

답변

30

(인터페이스 작성기에서) 모든 컨트롤과 레이블 등이있는보기를 엽니 다. 모두 선택하십시오. 그런 다음 편집기 메뉴에서 포함 위치를 선택한 다음보기 스크롤을 선택하십시오.

참고 : 이전 버전의 Xcode에서는 레이아웃 메뉴에 다음 개체 삽입 ... (스크롤 뷰)입니다. 당신이 하드 코드에 contentSize의 크기를 필요가 없습니다

+0

마크 W 그것에 나를 이길 :

는 사용 엑스 코드 4의 동일 귀하의 의견을 선택해야 할 일. – mahboudz

+2

예상대로 작동하지 않습니다. 이제는 UIScrollView 아래에 모든 것이 있지만 앱을로드하면 아무 것도 스크롤 할 수 없습니다. 왜? – erotsppa

+10

IB에서는 스크롤 뷰가 충분히 작아 앱이 실행될 때보기에 전체 내용이 표시되도록해야합니다. 즉, 해당 경계선/프레임이 해당 뷰의 크기보다 작거나 같아야합니다. 그런 다음 앱에서 모든 버튼, 레이블 등으로보기의 scrollview.contentSize = 크기를 설정해야합니다. 이 값은 스크롤 뷰에 대해 설정 한 프레임/경계보다 큽니다. 모든 작업이 올바르게 완료되면 다른 작업없이 스크롤 할 수 있어야합니다. – mahboudz

3

스크롤보기에 넣으려는 모든 개체를 선택하고 레이아웃 메뉴로 이동하여 "개체 포함"을 선택하고 "보기 스크롤"을 선택하십시오.

25

내 선호하는 솔루션 :


NB : 당신은 여기에 트릭을 사용하여이의 소스 코드 부분을 피할 수 있습니다 : https://stackoverflow.com/a/11239123/153422 - 아직 시도하지는 않았지만. 다음에서 레이아웃> 삽입 개체 이동, 모두 선택 :

이 트릭의 나머지 부분은 ... 당신은 아직도 IB에서 하나의 UIView (에 어쨌든


  1. 이동 모든 컨트롤을 사용해야합니다. 함께 IBOutlet 속성을 사용하여 소스 코드를 하나의 UIView이 (빌더 인터페이스 NOT, 소스 코드

  2. 아래 참조) 것을 ...>보기)

  3. 연결 시설이 (IB입니다 여기서 부러지면 UIScrollView의 원점을 잘못 설정하는 버그가 있습니다. 뷰를 중앙에 놓으려고합니다. 애플은 결코 기본적인 버그, 한숨을 확인하지 않았다) : 단일 UIView를 UIScrollView로 옮긴다. (아래 코드 참조).

  4. 사용 크기 "자동으로"올바른 크기를 설정합니다.

코드 (StackOverflow의 날 번호가 매겨진 목록 내부 코드를 삽입 못하게 한숨.)

헤더 파일 :

/** outlet that you hook up to the view created in step 1 */ 
@property(nonatomic, retain) IBOutlet UIView *masterView; 

클래스 파일 :

/** inside your viewDidLoad method */ 
[scrollview addSubview: masterView]; // step 3 
scrollView.contentSize = [masterView sizeThatFits:CGSizeZero]; // step 4 

을 .. 내가 최근에 확인한 것은 아니지만, IIRC는 2.x 및 3.x에서 모두 작동합니다.

+0

이 솔루션은 훌륭합니다. 게시 주셔서 감사합니다 – JoshHighland

+0

이것은 또한 4.x에서 잘 작동합니다 - 저는 여전히 문제없이 응용 프로그램에서 사용하고 있습니다. – Adam

+0

이것은 iPhone의 iOS 4.2에서 작동합니다. UIScrollView 높이는 ViewController의 최상위 UIView와 같거나 같아야합니다. 나는 설정을 손보고 있었고 이것을 다시 잊어 버렸다. 여전히 잘못된 위치로 튀어 오르는 것처럼 보였으므로 혼란 스러웠습니다. –

4

간편함 :

먼저보기에 스크롤보기를 추가하십시오. 스크롤보기의 크기를 변경하십시오 (예 : 700 픽셀로 설정). 컨트롤 넣기 하단 (보이지 않는 부분)에 컨트롤을 넣거나 편집하려면 스크롤 뷰를 선택하고 Y 시작 위치를 -300으로 변경하십시오. Voila. 편집 후 Y 시작 위치를 다시 0으로 설정하십시오.

+0

또는 크기를 늘린 다음 다시 줄일 수 있습니다.스크롤링은 좋지만, 구현되지 않았다는 것에 놀라지는 않습니다. – Casebash

+0

이렇게하면 스크롤 뷰의 "프레임"크기를 페이지의 뷰 크기 (뷰 포털)로 수동으로 (다시 설정해야합니다. "contentSize"를 총 콘텐츠 크기로 설정하십시오. 나중에 0,0으로 기본 설정되며 contentSize가 frame.size보다 크지 않으면 스크롤이 발생하지 않습니다. 다른 두 가지와 함께 좋은 추가 전략입니다. 감사합니다! –

1

이 질문은 아주 오래된이지만, 나는이 같은 문제를 가지고 있었고, 거기에 많은 도움을 찾을 수 없습니다로 내가 찾은 해결 방법을 제안합니다 :

IB, 당신은 개체를 배치 할 경우

420 픽셀을 벗어난 상태에서 모든 개체와 함께 스크롤 뷰가 포함 된보기의 상태 표시 줄, 위쪽 표시 줄 및 아래쪽 막대 모두에 대해 지정되지 않았 음을 확인하십시오. 이렇게하면보기의 화면 크기를 수동으로 조정할 수 있습니다. 그런 다음 H 값을 스크롤보기에 맞게 조정하고 다른 모든 개체에 액세스하여 함께 작업 한 다음 H 값의 변경 내용을 취소 한 다음 필요로하는 막대를 설정하는 Ximonn의 조언을 따를 수 있습니다.

0

나는 이것을 며칠 동안 찾고 있었고 마침내 나를 위해 일한 해결책으로이 사이트를 보았습니다.

Scrolling with UIScrollView

은 기본적으로 당신은 그 안에있는 UIScrollView 객체와 메인 볼 수 있습니다. 그런 다음 모든 콘텐츠가 포함 된 다른 콘텐츠보기. 그런 다음 내용보기를 스크롤보기에 추가합니다. 마지막으로 스크롤 뷰의 콘텐츠 크기를 콘텐츠보기의 크기로 설정합니다.

1

중요한 작은 것. UIScrollView에서 큰 하위 뷰 (예 : UIImageView)를 스크롤하려면이 하위 뷰에 대해 InterfaceBuilder ->보기 창에서 "User Interaction Enabled"확인란의 선택을 취소하십시오. 또는 프로그래밍 방식으로 수행하십시오.

subview.userInteractionEnabled = NO; 

그렇지 않으면이 하위보기가 효과없이 화면에 쌓입니다.

0

나는이 스레드가 조금 더 오래되었다는 것을 알고있다 ... 그러나 누군가는 구글에서 찾을 수있다. 내가 작업을 완수하기 위해이 작은 도우미 방법을 썼다 :

- (void)addSubview:(UIView *)theSubView toScrollView:(UIScrollView *)theScrollView 
{ 
    [theScrollView addSubview:theSubView]; 
    theScrollView.contentSize = theSubView.bounds.size; 
} 

당신은 단지 헤더에이 함께 IBOutlet 년대를 선언해야합니다 (예 : contentViewscrollView) 그리고 당신은 UIView를로드 할 whereever,이 같은 메소드를 호출 당신의 소스 코드와 UIScrollView로 :

[self addSubview:contentView toScrollView:scrollView];

나는이 방법

있는 viewDidLoad

에 전화 기능 iOS

4

나만의 것인지 모르겠지만 여기에있는 다른 답변의 지침을 따르려고했지만 아무도 작동하지 않았습니다. 모든 답변에는 필요한 모든 것이 포함되어 있습니다. 각 부분은 우리가 뭔가를하도록 알고 있다고 가정하고 추측하는 부분입니다. 나는 마지막으로이 작업을 red artisan. 그래서 ... 내가 여기에 도착하는 데 필요한 모든 단계를 나열하고의 도움으로 그것을 알아 냈 : 인터페이스 빌더에서

  1. 보기를 추가 한 다음에 컨트롤을 추가 (또는 컨트롤이 메인 뷰에 이미있는 경우 모든 컨트롤을 선택한 다음 편집기 | 소스보기로 이동 한 다음 새 뷰를 드래그하여 주 뷰 외부에있는 모든 뷰로 드래그 할 수 있습니다. 이보기는 원하는 크기가 될 수 있습니다.

  2. InterfaceBuilder에서 기본보기에 스크롤보기를 추가하고 전체 기본보기를 차지하도록 크기를 조정하십시오.

  3. 아래 코드를 UIViewController 헤더 및 클래스 파일에 추가하십시오.

  4. InterfaceBuilder에서 컨트롤이 들어있는보기를 File 's Owner의 'contentView'에 연결하십시오. 파일 뷰어에서 'scrollView'로 스크롤 뷰를 연결하십시오.

헤더 파일 :

 
    @interface MyViewController : UIViewController 
    @property(nonatomic, retain) IBOutlet UIScrollView *scrollView; 
    @property(nonatomic, retain) IBOutlet UIView *contentView; 

클래스 파일 :

 
    @synthesize scrollView, contentView; 

    - (void)viewDidLoad 
    { 
     [super viewDidLoad];  
     [self.scrollView addSubview:self.contentView]; 
     self.scrollView.contentSize = self.contentView.bounds.size; 
    } 

    - (void)viewDidUnload 
    { 
     self.scrollView = nil; 
     self.contentView = nil; 
     [super viewDidUnload]; 
    } 
0

선택한 대답은 엑스 코드 4, 3

그러나 Xcode를 위해 잘 작동, 메뉴는 다시 한 - 약간 정렬.

편집기> 삽입에서> 스크롤보기

관련 문제