调整子视图大小时出错

时间:2015-08-17 09:45:57

标签: ios uiview

我在视图控制器的主视图中有以下两种视图:

enter image description here

我的要求非常简单,我想根据某些条件调整我的view2以占用完整视图。目前,我不关心这个条件,只想在我的viewDidLoad内调整view2的大小。这是我正在使用的代码。

    CGRect newFrame = self.view2.frame;
    [self.view2 removeFromSuperview];
    [self.view1 removeFromSuperview];                
    newFrame.size.width =703;// width of main view
    newFrame.size.height =632;// height of main view
    newFrame.origin.x=0;
    newFrame.origin.y=0;
    [self.view2 setFrame:newFrame];       
    [self.view addSubview:self.view2];

在上面的代码中,view是视图控制器主视图的出口。 view2是我的view2的出口,view1是上面照片中的view1。我的view1的背景颜色为黑色,view2的背景颜色为红色。该应用程序工作正常没有上面的调整大小代码,但当我运行上面的调整大小代码时,我得到一个空屏幕。

有人请帮助我找出我的错误。

提前致谢!

2 个答案:

答案 0 :(得分:1)

您不应尝试在viewDidLoad()中设置任何子视图的框架。您将无法获得从viewDidLoad()中的故事板设置的正确帧大小。在viewDidLoad()中尝试NSLog(NSStringFromCGRect(self.view1.frame)。在viewDidLayoutSubviews()

中更改子视图框架的正确位置

在viewDidLayoutSubviews中尝试此操作:

CGRect newFrame = view2.frame
NSLog(NSStringFromCGRect(newFrame))
newFrame.origin.x = CGFloat(0.0)
newFrame.origin.y = CGFloat(0.0)
newFrame.size.width = CGFloat(703.0)
newFrame.size.height = CGFloat(632.0)
view2.frame = newFrame
NSLog(NSStringFromCGRect(newFrame))

答案 1 :(得分:0)

也许,不需要从主视图中删除视图。如果你想调整视图的大小,只需尝试这样而不是所有代码。

-(void)viewDidLayoutSubviews{
     self.view2.frame = CGRectMake(0, 0, 320, 400);
}

编辑:

使用上述方法中的代码而不是viewDidLoad。