xcode / iOS:Autoresize填充视图 – 显式帧大小是必不可less的?

我想要一个UITextView来填充它的superView ,这是一个UIViewController实例内的普通UIView

看来,我不能让UITextView完全通过使用autoresizingMaskautoresizesSubviews的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]; 

但是,如果我在视图控制器中实例化我自己的视图,replace它的'.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; 

我意识到重新实现UIViewController的'.view'是很难的,任何人都可以解释我做错了什么? 我推测我可以通过在我的UIViewController中初始化框架设置代码来调整UITextView大小来解决这个问题,之后autoresizing调整操作将按照需要进行。

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

…但看起来view.frame没有设置在这个阶段,它没有定义'.size'的值,所以再次textView仍然很小。

什么是实现我想要的正确方法? 我必须通过UITextView:initWithFrame来显式指定全屏尺寸来填充它的超级视图吗?

我会很感激你可以提供的任何build议。

Autoresizing并不意味着子视图将占据其超级视图的大小。 这只是意味着,只要超级观点的界限发生变化,就会相对于超级观点的大小变化来调整。 所以最初,你必须设置子视图的大小为正确的值。 然后,自动调整掩码将处理将来的大小变化。

这是你需要的一切:

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

而这里Swift 3的解决scheme:

 myView.autoresizingMask = [.flexibleWidth, .flexibleHeight]