【问题标题】:Autolayout iPad for Portrait and Landscape用于纵向和横向的自动布局 iPad
【发布时间】:2014-12-20 09:55:42
【问题描述】:

鉴于我们对 iPad 纵向和 iPad 横向只有共同的尺寸等级,您最终如何针对不同的方向自定义 iPad 的自动布局行为/约束?

我想在肖像中拥有这样的东西:

这在横向:

【问题讨论】:

    标签: ios objective-c ipad ios8 autolayout


    【解决方案1】:

    在 iOS 8 中(目前)最简单的方法是使用 viewWillTransitionToSize:withTransitionCoordinator

    这里有一个使用上述通知testLandscapePortrait_iPad 的请求示例

    【讨论】:

      【解决方案2】:

      在 iOS 8 中,您可以使用 viewWillTransitionToSize:withTransitionCoordinator:,在控制器旋转时收到通知。使用高度与宽度的比率来确定您要移动到的方向,并相应地调整您的约束。您可以将 IBOutlets 设置为视图的高度和宽度约束,并在该方法内更改它们的常量值。

      另一种方法是同时使用乘数和常数,以自动调整旋转约束。例如,相对宽度约束的公式是:

      subview.width = superview.width * 乘数 + 常数

      因此,例如,如果您希望纵向视图全宽 (768) 和横向视图全宽 (768),您可以求解这两个方程,

      768 = 768 * m + c   and   350 = 1024*m + c
      
      Solving those, gives you m= -1.6328  and   c= 2022
      

      要使用它,您可以在 IB 中为您的子视图设置宽度限制,但选中“在构建时删除”框,以便将其删除并替换为您在代码中添加的那个。

      - (void)viewDidLoad {
          [super viewDidLoad];
          [self.view addConstraint:[NSLayoutConstraint constraintWithItem:self.subView attribute:NSLayoutAttributeWidth relatedBy:0 toItem:self.view attribute:NSLayoutAttributeWidth multiplier:-1.6328 constant:2022]];
      }
      

      通常,您可以在 IB 中完成所有这些操作,但前提是乘数为正;我用这些数字试过了,系统不允许我使用负数作为乘数。

      【讨论】:

      • 哦,谢谢@rdelmar。我是自动布局视图领域的新手,所以我觉得你的回答很有趣。似乎我们没有明确的可能性从 XIB 中做到这一点。太糟糕了。
      • 你知道你是神吗??
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2013-08-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-07-21
      • 1970-01-01
      相关资源
      最近更新 更多