2011-02-07 3 views
36

UITextViewsuperView을 채우고 UIViewUIViewController 인스턴스 내에 있습니다.xcode/iOS :보기를 채우려면 자동 크기 지정 - 명시 적 프레임 크기는 필수입니까?

UITextViewautoresizingMaskautoresizesSubviews이라는 API 지정 속성을 사용하여이 작업을 단독으로 수행 할 수없는 것으로 보입니다. 여기에 표시된대로 설정하면 아무런 효과가 없습니다. superView이 화면을 채우더라도 UITextView은 작게 유지됩니다. 내가보기 컨트롤러 내에서 내 자신의 뷰를 인스턴스화하는 경우

// use existing instantiated view inside view controller; 
// ensure autosizing enabled 
self.view.autoresizesSubviews = YES; 
self.view.autoresizingMask = UIViewAutoresizingFlexibleHeight| 
          UIViewAutoresizingFlexibleWidth; 
// create textview 
textView = [[[UITextView alloc] autorelease] initWithFrame:CGRectMake(0, 0, 1, 1)]; 
// enable textview autoresizing 
[textView setAutoresizingMask:UIViewAutoresizingFlexibleWidth| 
           UIViewAutoresizingFlexibleHeight]; 
// add textview to view 
[self.view addSubview:textView]; 

그러나, 그 '.view'속성을 교체 한 후 예상대로 모든 것이 작동하고, 텍스트 뷰는 수퍼 채우고 : 나는 '

// reinstantiate view inside view controller 
self.view = [[UIView alloc]init]; 
// create textview 
textView = [[[UITextView alloc] autorelease] initWithFrame:CGRectMake(0, 0, 1, 1)]; 
// enable textview autoresizing 
[textView setAutoresizingMask:UIViewAutoresizingFlexibleWidth| 
           UIViewAutoresizingFlexibleHeight]; 
// add textview to view 
[self.view addSubview:textView]; 

을 이러한 initialisers/모든 방법 안에 모두 코드 덩어리를 시도하고, 같은 상황이 모든 경우에 발생했습니다 :

-(id)init; 
-(id)initWithFrame:(CGRect)frame; 
-(void)viewDidLoad; 

나는 실현 그의 '.view'을 재차 생성은 추한 사람입니다. 내가 뭘 잘못하고 있는지 설명 할 수 있습니까? 나는 내 UIViewController에 초기 프레임 설정 코드를 넣고 UITextView의 크기를 한 번 조정 한 다음에 autoresizing을 원하는대로 작동시킴으로써이 문제를 극복 할 수 있다고 생각했습니다.

-(void)viewDidLoad { 
    textView.frame = self.view.frame; 
} 

이 ...하지만 겉으로 view.frame가이 단계에서 설정되어 있지 않은, 그렇게 다시 한 번 텍스트 뷰는 작은 남아, 그 '크기는'값이 정의되어 있지 않습니다.

내가 원하는 것을 달성하는 올바른 방법은 무엇입니까? 수퍼 뷰를 채우기 위해 전체 화면 크기를 명시 적으로 UITextView:initWithFrame으로 지정해야합니까?

제공 할 수있는 조언에 감사드립니다.

+1

는'init' 전에없는'autorelease'를 수행합니다. 정확한 순서는'... alloc] init] autorelease]'입니다. 'UIView'는 괜찮지 만'autorelease'와'init'을 잘못된 순서로 사용하면'NSString'과 다른 클래스 클러스터가 새어 나올 것입니다. 정말로 당신의 진짜 질문을 도울 수 없기 때문에 유감스럽게 생각합니다. – Yuji

+1

감사합니다. Yuji, 나는 팁을 감사합니다 - 내가 몰랐던 것을! – KomodoDave

답변

88

자동 크기 조정은 하위보기가 수퍼보기의 크기를 차지하는 것은 아닙니다. 슈퍼 뷰의 경계가 바뀔 때마다 슈퍼 뷰의 크기 변경에 비례하여 크기가 조정된다는 것을 의미합니다. 그래서 처음에는 서브 뷰의 크기를 올바른 값으로 설정해야합니다. 자동 크기 조정 마스크는 앞으로 크기 변경을 처리합니다. 이 모든입니다

이 필요합니다

textView = [[[UITextView alloc] autorelease] initWithFrame:self.view.bounds]; 
[textView setAutoresizingMask:UIViewAutoresizingFlexibleWidth| 
           UIViewAutoresizingFlexibleHeight]; 
+1

이걸 loadView에 넣으십시오. ([super loadView]를 먼저 호출해야합니다.) 많은 일을하게됩니다 :) 감사합니다. Ole – KomodoDave

+0

@KomodoDave 감사합니다. 정말 좋은 정보 : D –

+0

Swift의 경우 다음과 같이 보입니다 : var textView = UITextView (frame : self.view.bounds) textView.autoresizingMask = UIViewAutoresizing.FlexibleWidth | UIViewAutoresizing.FlexibleHeight' – martinmose

0

그리고 여기 스위프트 3 솔루션 :

myView.autoresizingMask = [.flexibleWidth, .flexibleHeight]