Подтвердить что ты не робот

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 один раз, а после этого autoresizing будет работать по желанию.

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

... но, казалось бы, view.frame не настроен на этом этапе, у него не определены его значения .size, поэтому еще раз textView остается небольшим.

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

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

4b9b3361

Ответ 1

Авторезистирование не означает, что subview будет занимать размер своего супервизора. Это просто означает, что он изменит размер относительно изменения размера своего супервизора всякий раз, когда изменения супервизора изменится. Поэтому сначала вам нужно установить размер подзаголовка в правильное значение. Затем маска авторезизации будет обрабатывать изменения размеров в будущем.

Это все, что вам нужно:

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

Ответ 2

И здесь Swift 3:

myView.autoresizingMask = [.flexibleWidth, .flexibleHeight]