xcode / iOS:Autoresize填充视图 – 显式帧大小是必不可less的?
我想要一个UITextView
来填充它的superView
,这是一个UIViewController
实例内的普通UIView
。
看来,我不能让UITextView
完全通过使用autoresizingMask
和autoresizesSubviews
的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]