鉴于我们只有iPad Portrait和iPad Landscape的通用尺寸等级,您如何最终为不同方向自定义iPad的Autolayout行为/约束?
我想在Portrait中使用这样的内容:
这在横向:
答案 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
找到您的请求示例