xcode / iOS: автоматическое изменение размера для заполнения представления - необходим явный размер кадра?

Я бы хотел, чтобы UITextView заполнил свой superView , который представляет собой простой UIView внутри экземпляра UIViewController .

Похоже, я не могу заставить UITextView делать это исключительно с помощью свойств, определенных API autoresizingMask и autoresizesSubviews . Установка их, как показано здесь, ничего не дает; UITextView остается небольшим, хотя его superView заполняет экран.

// 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', тогда все работает, как ожидалось, и textView заполняет свой супервизор:

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

Я пробовал оба фрагмента кода внутри всех этих инициализаторов / методов, и во всех случаях возникает одна и та же ситуация:

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

Я понимаю, что восстанавливаю '.view' из UIViewController ускользает, может ли кто-нибудь объяснить, что я м делаю не так? Я предположил, что смогу решить эту проблему, имея код начальной настройки кадра в моем UIViewController , чтобы изменить размер UITextView один раз, а затем автоматическое изменение размера будет работать должным образом.

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

... но, похоже, view.frame не настроен на этом этапе, для него не определены значения '.size', поэтому снова textView остается маленьким.

Каков правильный способ достичь того, что я хочу ? Должен ли я явно указывать полноэкранные размеры через UITextView: initWithFrame , чтобы заставить его заполнить свой супервизор?

Я буду благодарен за любой совет, который вы можете предложить.

36
задан Alex Cio 6 January 2016 в 14:24
поделиться