繁体   English   中英

Objective-C-当添加子视图时,我的子视图从屏幕的底部移出。 对镜框的误解?

[英]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];
}

对于填充,我确实在位置xy放置了15 ...对于框架,我确实通过删除了填充来计算了self.view的大小...如您所见,它对于width很好,但是对于height ,这是一个很大的失败。 它超出了屏幕。

在我的AppDelegate.h ,我设置了navigationController.navigationBar.translucent = NO; AppDelegate.h ,以便当我为xy设置位置时,它在navigationBar之后很好地开始。

我不理解这种高度的怪异行为……如果有人对此有很好的解释,请。

谢谢

首先,您不应该依赖viewDidLoadself.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)];

它在这里没有什么区别,但通常会有所不同,例如,如果您基于父框架计算框架的xy

loadView方法只是创建视图。 在调用loadView时,没有有关最终视图框架的信息,因此无法正确放置其子视图。

viewDidLayoutSubviews是更新子视图框架的正确位置:

- (void)viewDidLayoutSubviews {
    [super viewDidLayoutSubviews];
    // update child view frame here
}

备注:您可以在代码中定义子视图的自动布局约束,并且在调整视图控制器的视图大小时,它们将自动应用于子视图。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM