1

鉴于:

一个“徽标”(从超级视图顶部垂直空间 >= 10 的 uiimageview)和一个“登录”,徽标和持有者视图之间的垂直空间 <=31

目标:

在横向模式下,由于屏幕尺寸的变化,徽标将向上移动,并且持有人视图也应该移动。

但是,当我从纵向旋转到横向时,我得到的是垂直约束仍然保持在 81 (不知何故我无法从 xcode 中删除这个值)。此外,“主视图”和“登录”之间的垂直空间也不能删除。我知道我在这里做错了什么。

如果您对此问题有任何建议,请提供帮助。

细节:

+图片1是纵向模式,有一些关于约束的细节

在此处输入图像描述

+picture 2 是横向模式,有一些错误。

在此处输入图像描述

编辑:就像我设置的方式一样,我希望徽标的垂直空间可以缩小,但它总是 >= 10 从主视图的顶部开始

4

2 回答 2

1

我不知道这是否可以在 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];
}

通过同时使用乘数和常数,您可以调整它在旋转后的移动方式。我在这里选择的数字对我来说看起来很不错,但你可以把它们弄乱,看看它们做了什么。您可以将乘数视为一个敏感因子——分数越小,旋转时与顶部的距离变化越小。如果您需要精确的值,您可以使用一些代数来计算乘数和常数的值。

于 2013-02-06T17:31:51.383 回答
0

您需要找到一种以声明方式表达关系的方法——最好是用适用于这两种情况的术语。

你还没有完全说出你想在横向模式下发生什么。顶部的标志,但离顶部多远?您希望持有人视图在哪里?

有一个WWDC 视频,对于了解自动布局的工作原理至关重要。你有机会看吗?

于 2013-02-06T16:46:25.403 回答