2011-02-07 22 views
36

Tôi muốn có một số UITextView để điền số superView, số này là UIView đơn giản trong một phiên bản UIViewController.xcode/iOS: Tự động điền chế độ xem - kích thước khung hình rõ ràng là điều cần thiết?

Dường như tôi không thể thực hiện việc UITextView thực hiện việc này chỉ bằng cách sử dụng các thuộc tính được chỉ định API của autoresizingMaskautoresizesSubviews. Đặt những thứ này như được hiển thị ở đây không có gì; UITextView vẫn còn nhỏ mặc dù superView lấp đầy màn hình.

// 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]; 

Tuy nhiên, nếu tôi nhanh chóng nhìn của riêng tôi bên trong bộ điều khiển xem, thay thế '.view' tài sản của mình, sau đó mọi thứ hoạt động như mong đợi, và TextView đầy SuperView của nó:

// 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]; 

tôi đã thử cả hai khối mã bên trong tất cả các initialisers/phương pháp, và tình huống tương tự phát sinh trong mọi trường hợp:

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

tôi nhận ra rằng reinstantiating của .view 'của UIViewController là fugly, bất cứ ai có thể giải thích những gì tôi đang làm sai? Tôi cho rằng tôi có thể khắc phục vấn đề này bằng mã cài đặt khung ban đầu trong số UIViewController để đổi kích thước UITextView một lần và sau đó autoresizing sẽ hoạt động như mong muốn.

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

... nhưng dường như view.frame không được thiết lập ở giai đoạn này, nó không có giá trị '.size' được xác định, do đó, một lần nữa textView vẫn còn nhỏ.

Cách thích hợp để đạt được những gì tôi muốn là gì? Tôi có phải chỉ định rõ ràng kích thước toàn màn hình qua UITextView:initWithFrame để làm cho nó lấp đầy tầm nhìn của mình không?

Tôi rất biết ơn mọi lời khuyên bạn có thể cung cấp.

+1

Đừng 'autorelease' trước khi bạn 'init'. Thứ tự đúng là '... alloc] init] autorelease]'. 'UIView' sẽ ổn, nhưng' NSString's và các nhóm lớp khác sẽ bị rò rỉ nếu bạn sử dụng 'autorelease' và' init' theo thứ tự sai. Xin lỗi vì không thể giúp câu hỏi thực sự của bạn. – Yuji

+1

Cảm ơn Yuji, tôi đánh giá cao mẹo - điều mà tôi không biết! – KomodoDave

Trả lời

88

Tự động hóa không có nghĩa là chế độ xem phụ sẽ chiếm kích thước của người giám sát của nó. Nó chỉ có nghĩa là nó sẽ thay đổi kích thước liên quan đến sự thay đổi kích thước của superview của nó bất cứ khi nào các giới hạn của superview thay đổi. Vì vậy, ban đầu, bạn phải thiết lập kích thước của subview với giá trị chính xác. Mặt nạ autoresizing sau đó sẽ đối phó với những thay đổi kích thước trong tương lai.

Đây là tất cả các bạn cần:

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

Tôi đặt điều này vào loadView (đảm bảo gọi [super loadView] trước) và nó thực hiện công việc độc đáo :) Rất cám ơn, Ole – KomodoDave

+0

@KomodoDave cảm ơn bạn. thực sự tốt thông tin: D –

+0

Đối với Swift nó trông như thế này: 'var textView = UITextView (frame: self.view.bounds) textView.autoresizingMask = UIViewAutoresizing.FlexibleWidth | UIViewAutoresizing.FlexibleHeight' – martinmose

0

Và đây Swift 3 giải pháp:

myView.autoresizingMask = [.flexibleWidth, .flexibleHeight] 
Các vấn đề liên quan