最近一直在研究自动布局,我被一个看似微不足道的问题所困扰。我有一个视图,我想坐在屏幕的顶部,占据屏幕高度的一半。在自动布局之前很简单--只需将它固定在适当的位置,并告诉它在superview调整大小时垂直扩展即可。
现在,我无论如何也不知道该怎么做。下面是我尝试设置它时得到的结果:
底部空间约束被设置为“equals284”,当我切换到iPhone4布局时,这对我来说是绝对的,也是绝对无用的,因为它在屏幕底部保留了284点的空间,并将视图缩小到不再是屏幕大小的一半。并且没有办法将该约束设置为等于任何其他视图高度的某一部分。
在挣扎了一段时间后,我能想到的唯一方法就是在这个视图下面引入另一个视图,将它们的高度固定在相同的位置,让它们坐在彼此的上下,然后将第二个(底部)视图设置为不可见。这看起来有点丑陋!
我是不是漏掉了什么明显的东西?
发布于 2014-06-20 02:43:41
现在,至少在Xcode 5.1.1版本中,这在IB中是可能的。虽然我花了一些时间才弄明白它实际上是超级简单的:
首先创建基本的顶部对齐约束(您还需要设置底部、左侧和右侧约束,就像法线一样)。然后选择约束并导航到Attribute检查器:
然后你可以调整乘数。如果你想要50%的超级视图,把它留在1
,因为它是按照超级视图的中心对齐的。这也是一个很好的方法来创建其他百分比的视图(比如25%的超级视图)
发布于 2014-11-02 22:41:52
可以在任意视图之间设置精确比例的故事板解决方案:
Now:
利润!
另请注意,此方法适用于不同嵌套级别的视图,并且(显然)适用于宽度
附注:有时“颠倒第一项和第二项”约束或设置反向乘数(例如2而不是0.5)可能会有帮助(但如果您不了解视图之间的关系,这些方法就不会有帮助)。
发布于 2013-02-18 22:47:10
过了一段时间后,我得出了以下结论。
我注意到这是一个答案,但它不是很令人满意,因为它假设你实际上不能在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的乘数,作用于上方视图。我不得不将IB中底部垂直空间约束的优先级设置为低于1000,以避免出现大量关于违反约束的运行时消息。
因此,如果有人能展示如何在界面生成器中做到这一点,那就更好地回答我的问题,否则我猜这是最好的(目前)??
https://stackoverflow.com/questions/14935825
复制相似问题