如何从横向开始正确加载子视图

时间:2012-06-14 12:25:06

标签: ios uistoryboard

我正在构建一个iPad应用程序,其视图水平分割并从顶部和底部动画(想想下颚滑动关闭和打开以分别出现和消失)。

我的问题是自定义钳口子视图的布局仅在视图以横向方向加载时才会被破坏。 (钳口视图容器以适当的大小加载,但后半部分的上半部分和下半部分都太高了,离开了屏幕。但它们的宽度是正确的。)

我可以从纵向开始然后旋转,一切都正确排列。

我已经尝试将新视图的框架设置为一堆地方的原始边界(正如许多答案所建议的那样,对我来说不起作用,请求链接)但要么没有找到正确的地方,或需要更多的东西。

我是否需要做一些特殊的事情来扩大规模?有没有一点我不应该做动画? (我正在尝试在我的新视图控制器的viewDidLoad中移动顶部和底部。)

2 个答案:

答案 0 :(得分:2)

解决方案需要2个部分。

第一个在这个答案中描述: https://stackoverflow.com/a/8574519/1143123 其中描述了使用viewWillAppear方法而不是viewDidLoad(前面称为边界的“不正确”值)。这解决了在景观中加载视图(并传播到后续旋转)时视图正确布局的问题。

第二部分是如果我开始制作动画然后在此期间进行旋转,视图仍然可能会搞砸。我改变了我的动画类只是为了移动中心坐标(而不是滑动框架),这首先是更好的,但是没有解决它。最后,我在ViewController中为显示这些问题的类硬编码了以下内容:

- (void)didRotateFromInterfaceOrientation:(UIInterfaceOrientation)fromInterfaceOrientation {
    [super didRotateFromInterfaceOrientation:fromInterfaceOrientation];

    // The container view should match the size of the current view
    gameView.frame = self.view.bounds;

    CGFloat width = self.view.bounds.size.width;
    if(roundInProgress) {
         gameView.jawsTop.frame = CGRectMake(0, 0, width, self.view.bounds.size.height/2);
         gameView.jawsBottom.frame = CGRectMake(0, self.view.bounds.size.height/2, width, self.view.bounds.size.height/2);

    } else {
        // If round not in progress, game cards should be offscreen
        CGFloat height = self.view.bounds.size.height/2;
        gameView.jawsTop.frame = CGRectMake(0, -height, width, height);
        gameView.jawsBottom.frame = CGRectMake(0, self.view.bounds.size.height, width, height);

    }
}

答案 1 :(得分:1)

在没有看到您的代码的情况下,我的猜测是它与您父视图的“Autoresize Subviews”属性和/或子视图的自动调整设置有关。尝试在Interface Builder中更改该属性,看看是否能解决您的问题。