使视角相对于一半的超高视角的高度

最近已经进入了自动布局,并且我陷入了一个看起来像一个非常微不足道的问题例子。 我有一种观点,我想坐在屏幕的顶部,占据屏幕高度的一半。 在自动布局之前简单 - 只需将它粘贴到位,并在超级视图大小调整时告诉它垂直扩展。

现在,我不能为我的生活看到如何去做。 以下是我尝试设置时得到的结果:

自动布局布鲁斯

底部空间约束设置为“等于284”,这对我来说绝对是无用的,因为它在屏幕底部保留了284个点的空间,并将视图缩小到不再是一半屏幕的大小。 而且无法将该约束设置为等于任何其他视图高度的一部分。

经过一段时间的努力之后,我能想到的唯一方法就是在这个视图下方引入另一个视图,平均地固定它们的高度,让它们坐在上面和下面,然后将第二个(底部)视图设置为不可见..这看起来有点丑陋!

我错过了什么明显的?..


从[至少] Xcode 5.1.1开始,这在IB中是可行的。 虽然我花了一段时间才弄清楚它实际上超级简单:

首先创建一个基本的顶部对齐约束(您还需要设置底部,左侧和右侧的约束,就像正常一样)。 然后选择约束并导航到“ 属性”检查器:

演示上述步骤

然后你可以调整乘数。 如果你想让超级视图的50%保持为1 ,因为它按照超级中心对齐。 这也是创建其他百分比视图的好方法(比如25%的超视图)

上面的第二步演示


故事板解决方案,您可以在任何视图之间设置精确比例:

设置高度平等约束

现在:

编辑约束的乘数

利润!!!

结果

PS还要注意,此方法适用于不同嵌套级别的视图,并且(显然)适用于宽度

PPS有时可能有助于“约束第一和第二项”或设置反向乘数(例如2而不是0.5)(但如果您不了解视图之间如何相互关联,则这些方法无效)。


多一点时间后,我想出了以下几点。

我将它视为一个答案,但它不是很令人满意,因为它假设你无法在Interface Builder中实际做到这一点,但是之后可以在代码中添加正确的约束:

- (void) viewWillAppear:(BOOL)animated
{

    NSLayoutConstraint *constraint = [NSLayoutConstraint constraintWithItem:upperview
                                                                 attribute:NSLayoutAttributeHeight 
                                                                 relatedBy:0 
                                                                    toItem:self.view
                                                                 attribute:NSLayoutAttributeHeight
                                                                multiplier:.5 
                                                                  constant:0];
    [self.view addConstraint:constraint];

}

基本上,它对self.view的高度设置了0.5的乘数,作用于upperview。 我必须将IB中底部垂直空间约束的优先级设置为低于1000,以避免关于破坏约束的一堆运行时消息。

因此,如果任何人都可以在界面生成器中展示如何做到这一点,那么最好回答我的问题,否则我认为这是一样好(现在)?

链接地址: http://www.djcxy.com/p/91583.html

上一篇: make height of view relative to half superview height

下一篇: How can I wrap text around stacked elements (ie elements with negative margins)?