Я хотел бы, чтобы 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
, чтобы он заполнил свой супервизор?
Буду признателен за любой совет, который вы можете предложить.
autorelease
доinit
. Правильный порядок: `... alloc] init] autorelease].
UIView` должен быть в порядке, ноNSString
s и другие кластеры классов будут просачиваться, если вы используетеautorelease
иinit
в неправильном порядке. Извините, что не смог помочь вашему реальному вопросу. - person Yuji   schedule 07.02.2011