2013-08-21 84 views
2

我开发了一个iPhone5的应用程序,我启用了使用自动布局。我已经将每个按钮的垂直空间40用于其另一个按钮。当我运行的iPhone4s这个应用程序的最后一个按钮不appeared.I.How降低垂直间距是在4s.enter图像描述这里运行使用自动布局,而4屏幕应用程序运行在3.5屏幕

This is how it looks in iphone 4s

+2

想出一组更好的不依赖于固定数字的约束。 –

+0

您必须正确设置每个按钮的“约束”。 – Exploring

+0

@DavidRönnqvist同意。或者,更准确地说,您需要不依赖于像素/点数量的约束。例如,使用固定的“乘数”(例如,超视图的中心Y的百分比)的centerY约束条件很好,因为无论屏幕高度如何,该约束都可以工作,但是您希望避免使用固定的“常量”值。 – Rob

回答

2

时,您需要使用的各个之间的间隔视图按钮。这样你就可以使用一个可变大小的空间,这取决于屏幕的高度。然后

事情是这样的......

@"V:|[_spacer1][_button1][_spacer2(==_spacer1)][_button2][_spacer3(==spacer1)][_button3]...[_lastSpacer(==spacer1)]|" 

这将布局都与他们之间的间隔相等的按钮。但是之间的空间会根据屏幕的高度而改变。

+0

感谢回复。有没有办法通过编码来减少垂直空间限制 – chandu

+1

为什么?这样可以工作,而且更容易,因为你不需要计算任何东西。例如,数字40从哪里来?如果你不得不使用计算器或做数学,那么你使用AutoLayout是错误的。 – Fogmeister

+0

N.B.您可以使间隔视图清晰,以便它们不可见。你只是用它们来布局。 – Fogmeister

2

如果你不想在代码中做到这一点,你必须在按钮之间添加一些隐藏的“间隔”视图,其中“等高”约束和没有明确的高度。它们将根据需要扩展/缩小,以正确放置按钮。

enter image description here

0

虽然你可以使用clear /隐藏UIView对象作为间隔,正如其他人所描述的,这是没有必要的。您还可以通过编程方式创建约束条件,均匀分配这些约束条件,并合理使用提供给constraintWithItem方法的multiplier值。例如,如果您有一组UIButton对象,则可以将它们垂直隔开:

[buttons enumerateObjectsUsingBlock:^(id obj, NSUInteger idx, BOOL *stop) { 
    [self.view addConstraint:[NSLayoutConstraint constraintWithItem:obj 
                  attribute:NSLayoutAttributeCenterY 
                  relatedBy:NSLayoutRelationEqual 
                  toItem:self.view 
                  attribute:NSLayoutAttributeCenterY 
                 multiplier:2.0 * (idx + 1.0)/([buttons count] + 1.0) 
                  constant:0.0]]; 
}]; 
相关问题