我不知道这是否可以在 IB 中完成——如果可以,我还没有弄清楚。我已经在代码中完成了,如下所示。我从图像视图顶部到具有固定值的主视图顶部的约束以及图像视图和登录视图之间的约束开始。这应该足以满足系统的要求,您可以删除主视图顶部或底部的任何其他约束(我在测试中使用了具有固有高度的按钮,所以我不需要设置它。如果你视图没有设置内在或特定的高度,您也必须这样做)。然后,在代码中,我将该约束删除到顶部(IBOutlet conTop),并将其重新设置到底部:
@implementation ViewController {
IBOutlet NSLayoutConstraint *conTop;
IBOutlet UIButton *button;
}
- (void)viewDidAppear:(BOOL)animated {
[super viewDidAppear:animated];
[self.view removeConstraint:conTop];
conTop = [NSLayoutConstraint constraintWithItem:button attribute:NSLayoutAttributeTop relatedBy:0 toItem:self.view attribute:NSLayoutAttributeBottom multiplier:.5 constant:-120];
[self.view addConstraint:conTop];
[self.view layoutSubviews];
}
通过同时使用乘数和常数,您可以调整它在旋转后的移动方式。我在这里选择的数字对我来说看起来很不错,但你可以把它们弄乱,看看它们做了什么。您可以将乘数视为一个敏感因子——分数越小,旋转时与顶部的距离变化越小。如果您需要精确的值,您可以使用一些代数来计算乘数和常数的值。