[英]Objective-C - When I add a subview, my subview is going out of the screen at the bottom. Misunderstanding of frames?
我正在练习Objective-C,我尝试以编程方式完成所有工作。
我正在创建一个简单的视图,将其添加到ViewController的视图中,但是此子视图不在屏幕上。 当我设置框架时,X和Y的位置会受到尊重,但其余部分则不会。
这是我的结果的屏幕截图:
如您所见...红色子视图从屏幕上消失。
这是我的loadView
在其中添加该子视图:
HomeViewController.m-loadView
-(void)loadView
{
self.view = [[UIView alloc] initWithFrame:[UIScreen mainScreen].bounds];
UIView *subview = [[UIView alloc] initWithFrame:CGRectMake(15, 15, self.view.frame.size.width - 30, self.view.frame.size.height - 30)];
[subview setBackgroundColor:[UIColor redColor]];
[self.view addSubview:subview];
}
对于填充,我确实在位置x
和y
放置了15 ...对于框架,我确实通过删除了填充来计算了self.view
的大小...如您所见,它对于width
很好,但是对于height
,这是一个很大的失败。 它超出了屏幕。
在我的AppDelegate.h
,我设置了navigationController.navigationBar.translucent = NO;
AppDelegate.h
,以便当我为x
和y
设置位置时,它在navigationBar
之后很好地开始。
我不理解这种高度的怪异行为……如果有人对此有很好的解释,请。
谢谢
首先,您不应该依赖viewDidLoad
中self.view
的值。 稍后在viewWillAppear:
中将其设置为正确的值。 如果在显示self.view
时自动调整子视图的大小,则可以保留代码。 为此,在子视图上设置autoresizingMask
:
subview.autoresizingMask = UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleHeight;
(如果使用自动版式,则添加一组等效的约束。)
另外,我建议使用bounds
而不是frame
:
UIView *subview = [[UIView alloc] initWithFrame:CGRectMake(15, 15, self.view.bounds.size.width - 30, self.view.bounds.size.height - 30)];
它在这里没有什么区别,但通常会有所不同,例如,如果您基于父框架计算框架的x
和y
。
loadView
方法只是创建视图。 在调用loadView
时,没有有关最终视图框架的信息,因此无法正确放置其子视图。
viewDidLayoutSubviews
是更新子视图框架的正确位置:
- (void)viewDidLayoutSubviews {
[super viewDidLayoutSubviews];
// update child view frame here
}
备注:您可以在代码中定义子视图的自动布局约束,并且在调整视图控制器的视图大小时,它们将自动应用于子视图。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.