Ios 使用autolayout和constraint设置按钮

Ios 使用autolayout和constraint设置按钮,ios,constraints,ios-autolayout,Ios,Constraints,Ios Autolayout,屏幕上有4个按钮。 我想将屏幕上的所有4个按钮放置在与所有屏幕(即4s、5s、6和6plus)中的图像所示距离相同的位置 我添加的约束 Button 1 : Top , leading and trailing Button 4: Bottom , leading and trailing Button 2 : Leading trailing top to button 1 Button 3: Leading trailing top to button

屏幕上有4个按钮。 我想将屏幕上的所有4个按钮放置在与所有屏幕(即4s、5s、6和6plus)中的图像所示距离相同的位置

我添加的约束

Button 1 : 
Top , leading and trailing

Button 4: 
Bottom , leading and trailing

Button 2 : 
Leading
trailing
top to button 1

Button 3: 
    Leading
    trailing
    top to button 2
    bottom to button 4
但我无法实现按钮2和按钮3具有相同的距离。 我只想通过使用自动布局和约束来实现这一点

请给我一些建议

像这样试试

你的约束应该是

按钮1-顶部、前导和尾随或容器中的水平中心

按钮2-顶部、前导和尾随或容器中的水平中心

按钮4-容器中的底部、前导和尾随或水平中心

按钮3-容器中的底部、前导和尾随或水平中心

现在,对于按钮2,取顶部约束的出口(ctrl+从约束拖动到类),从按钮3取底部约束的出口

例如,您的插座分别是button2Outlet和button3Outlet

所以,从viewdidload来看

CGFloat constantVslue = self.view.frame.size.height - (4 * buttonHeight) - 40 (top distance of button 1 + bottom distance of button 4); 

//40 is distance from top and bottom of 1st and 4th button respactively in my case (20+20) and in my case my button height is 30 so total 120.

CGFloat distance = constantVslue/3;

self.button2Outlet.constant = distance;
self.button3Outlet.constant = distance;

希望这会有所帮助:)

使用自动布局完成解决方案

由于在视图中使用偶数个按钮,因此需要在视图的中心(X&Y)位置添加高度为2的UILabel。 以下约束条件适用于所有屏幕,即4s、5s、6和6plus

[注意:如果按钮为奇数,则使用中间按钮代替标签]

约束条件:

标签: 1.中心X 2.中心Y 3.固定高度和宽度(高度=2,宽度=无限制)

按钮1:

  • 底部至按钮2(例如70)

  • 中心X

  • 定高定宽

  • 按钮2:

  • 顶部至按钮3(例如70)

  • 底部至标签(例如34)

  • 中心X

  • 定高定宽

  • 按钮3:

  • 顶部至标签(例如34)

  • 底部至按钮4(例如70)

  • 中心X

  • 定高定宽

  • 按钮4:

  • 顶部至按钮3(例如70)

  • 中心X

  • 定高定宽


  • 这完全可以通过Interface Builder实现:

    如果您想支持iOS9之前的iOS版本


  • 您需要在视图中使用隐藏分隔符(下图中为橙色)
  • 他们的身高应该相等
  • 按钮与其相邻间隔视图之间的距离应设置为0
  • 这使您能够为每种设备类型创建自适应布局(如果您将间隔器的视图高度设置为与superview的高度成比例):

    对于iOS9+只需使用具有垂直轴和所需分布空间的UIStackView即可


    您是否搜索过此问题的答案?使用堆栈视图还是填充视图?最好的解决方案可能是重复@Wain是的,我做了。但解决方案是使用spaceview或编码。我想完全通过自动布局和构造来实现这一点。@Ecaptain感谢您的评论。但解决方案是使用spaceview或编码。我想完全通过自动布局和构造来实现这一点。谢谢你的回答。我想完全通过自动布局和构造来实现它。然后去做,并告诉我你是否得到了预期的输出。非常感谢你,我试过了,但它在所有分辨率下都不起作用。我想你已经犯了一些错误,否则在我的演示中运行良好。为什么要使用不需要的元素。我认为这不是一个好方法。“隐藏视图”@BhavukJain你可能不相信,但它们是用来分发的。不要试图在没有问题的时候解决问题-UIView是免费的,不会造成任何性能问题,在这种情况下它们的使用是明确的,易于支持,并且不需要任何硬编码值或数百行代码。没有任何隐藏的视图,这样做更容易,它使您的故事板看起来更干净。把一个按钮放在中间,给它的垂直常数一些值,然后把所有的按钮放在它的参考位置,所有的按钮都有相等的间距。完成!我相信如果我们想对布局有更多的控制,尤其是在动画方面,这种方法会有所帮助。我们可以只使用隐藏视图属性来设置按钮的动画。这也提供了更简单的方法来播放按钮的位置。