用于纵向和横向的Autolayout iPad

时间:2014-10-24 14:29:25

标签: ios objective-c ipad ios8 autolayout

鉴于我们只有iPad Portrait和iPad Landscape的通用尺寸等级,您如何最终为不同方向自定义iPad的Autolayout行为/约束?

我想在Portrait中使用这样的内容:enter image description here

这在横向:enter image description here

2 个答案:

答案 0 :(得分:2)

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

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

subview.width = superview.width * multiplier + constant

因此,例如,如果您想要纵向视图全宽(768)和横向视图350,您将解决这两个等式,

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中执行此操作,但前提是乘数为正;我已尝试使用这些数字,系统不允许我使用负数作为乘数。

答案 1 :(得分:2)

在iOS 8中,简单的方法(暂时)是使用viewWillTransitionToSize:withTransitionCoordinator

您可以使用上述通知testLandscapePortrait_iPad

找到您的请求示例