如何在设备旋转上布置子视图

时间:2013-12-30 21:13:44

标签: ios iphone button interface-builder

此视图带有一系列按钮,适用于纵向设计,但不适用于横向设计。

portrait http://luigidaddario.it//iOS%20Simulator%20Screen%20shot%2029.dic.2013%2022.15.55.png

landscape http://luigidaddario.it//iOS%20Simulator%20Screen%20shot%2030.dic.2013%2020.10.13.png

如何正确布置横向和纵向?

1 个答案:

答案 0 :(得分:2)

您似乎已使用自动调整大小的蒙版添加了按钮(尽管可能缺少左下方黄色按钮的蒙版)。您至少有两种方法可以采用:

  1. 在视图控制器的viewWillLayoutSubviews中,根据该方向的位置,以编程方式设置每个按钮的frame。例如,如果您有一组按钮,则可以执行以下操作:

    - (void)viewWillLayoutSubviews
    {
        NSInteger cols, rows;
    
        if (self.view.bounds.size.width < self.view.bounds.size.height)
        {
            cols = 3;
            rows = 4;
        }
        else
        {
            cols = 4;
            rows = 3;
        }
    
        CGFloat pixelsWide = self.view.bounds.size.width / cols;
        CGFloat pixelsTall = self.view.bounds.size.height / rows;
    
        for (NSInteger i = 0; i < 11; i++)
        {
            UIView *view = self.buttons[i];
    
            NSInteger row = floor(i / cols);
            NSInteger col = i % cols;
    
            view.center = CGPointMake((col + 0.5) * pixelsWide,
                                      (row + 0.5) * pixelsTall);
        }
    }
    

    rotation

    (如果使用自动布局,而不是设置框架,则需要设置相应的约束。但是你说你没有使用自动布局。)

  2. 您可以使用UICollectionView,而不是自己将这些按钮添加到视图中,它会处理适合方向的单元格的位置。对于这种情况可能有些过分,但是当您想要将视图布局为一系列单元格时,集合视图是一个很好的选择。请参阅UIKit User Interface Catalog: Collection Views