【问题标题】:How to layout subviews on device rotation [closed]如何在设备旋转上布局子视图 [关闭]
【发布时间】:2013-12-30 21:13:43
【问题描述】:

这个带有一系列按钮的视图是为纵向设计的,但不是为横向设计的。

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

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

如何为横向和纵向正确布局?

【问题讨论】:

  • 什么意思? ;) 问题是按钮在横向模式下是无序的。
  • @user3147603 你在使用自动布局吗?
  • 不...但我尝试使用自动布局...,

标签: ios iphone button interface-builder


【解决方案1】:

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

  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);
        }
    }
    

    (如果使用自动布局,而不是设置框架,您将设置适当的约束。但您说您没有使用自动布局。)

  2. 您可以使用UICollectionView,而不是自己将这些按钮添加到您的视图中,这将负责放置适合方向的单元格。对于这种情况,这可能是矫枉过正,但是当您想将视图布局到一系列单元格中时,集合视图是一个很好的选择。见UIKit User Interface Catalog: Collection Views

【讨论】:

  • 谢谢 ;) ...但我对此有疑问:'UIView *view = self.buttons[i];' .它给了我错误。 (在“FirstViewController”类型的对象上找不到属性“按钮”
  • @LuigiDaddario 这只是一个示例,但您显然必须对其进行调整以匹配您引用的按钮(例如 IBOutlet 引用?)。关键信息是您应该以编程方式更改 viewWillLayoutSubviews 方法中各个按钮的 framecenter 属性
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2016-08-21
  • 1970-01-01
  • 1970-01-01
  • 2018-02-23
  • 1970-01-01
  • 2013-04-10
  • 1970-01-01
相关资源
最近更新 更多