【问题标题】:xcode buttons overlap despite constraints尽管有限制,xcode按钮仍重叠
【发布时间】:2015-08-05 02:18:53
【问题描述】:

我正在使用一系列 4 个按钮。所有相同的宽度和高度组合起来拉伸视图的宽度。我尝试在视觉上将它们相互约束并约束到它们上方的标签(也是视图的宽度)。我使用前沿查看最左侧按钮上的约束,使用后沿查看最右侧按钮上的约束。我还在所有按钮上使用了水平空间限制(应该为零)。尽管如此,当我运行我的模拟器时,第三个按钮总是在某种程度上与第四个按钮重叠。我已经完成并删除了所有约束并尝试再次添加它们,并且发生了相同的重叠。我有什么遗漏/做错了吗?为什么我的所有按钮都不能缩小以适应视图而不是重叠?

【问题讨论】:

  • 您是否有四个大小相同的按钮,并且都具有相同的父视图,并且您希望在该父视图中等距放置它们?
  • 是的,我希望它们保持相同的大小而不离开视图。它们都有水平约束,等宽约束,两端分别有前导和尾随约束
  • 运行应用程序、暂停执行并在(lldb) 提示符处输入po [[UIWindow keyWindow] _autolayoutTrace] 可能是值得的。确保您没有任何模棱两可的约束。此外,当您运行此程序时,您是否在控制台中收到有关不可满足约束的任何消息?那里有任何与约束相关的消息吗?

标签: ios xcode layout constraints


【解决方案1】:

我的代码中有类似的内容,如果您以编程方式设置按钮约束,我在其中有一个滚动视图和一个内容视图,并在情节提要中设置了约束,但我以编程方式添加了其他内容

button1.setTranslatesAutoresizingMaskIntoConstraints(false)

    constX = NSLayoutConstraint(item: button1, attribute: NSLayoutAttribute.CenterX, relatedBy: NSLayoutRelation.Equal, toItem: ContentView, attribute: NSLayoutAttribute.CenterX, multiplier: 1, constant: 0)
    view.addConstraint(constX)

    constTop = NSLayoutConstraint(item: button1, attribute: NSLayoutAttribute.Top, relatedBy: NSLayoutRelation.Equal, toItem: ContentView, attribute: NSLayoutAttribute.Top, multiplier: 1, constant: 20)
    view.addConstraint(constTop)

    constL = NSLayoutConstraint(item: button1, attribute: NSLayoutAttribute.Leading, relatedBy: NSLayoutRelation.Equal, toItem: ContentView, attribute: NSLayoutAttribute.Leading, multiplier: 1, constant: 20)
    view.addConstraint(constL)

    constR = NSLayoutConstraint(item: button1, attribute: NSLayoutAttribute.Trailing, relatedBy: NSLayoutRelation.Equal, toItem: ContentView, attribute: NSLayoutAttribute.Trailing, multiplier: 1, constant: -20)
    view.addConstraint(constR)

    constH = NSLayoutConstraint(item: button1, attribute: NSLayoutAttribute.Height, relatedBy: NSLayoutRelation.Equal, toItem: nil, attribute: NSLayoutAttribute.NotAnAttribute, multiplier: 1, constant: 50)
    button1.addConstraint(constH)


    button2.setTranslatesAutoresizingMaskIntoConstraints(false)

    constX = NSLayoutConstraint(item: button2, attribute: NSLayoutAttribute.CenterX, relatedBy: NSLayoutRelation.Equal, toItem: ContentView, attribute: NSLayoutAttribute.CenterX, multiplier: 1, constant: 0)
    view.addConstraint(constX)

    constTop = NSLayoutConstraint(item: button2, attribute: NSLayoutAttribute.Top, relatedBy: NSLayoutRelation.Equal, toItem: button1, attribute: NSLayoutAttribute.Bottom, multiplier: 1, constant: 10)
    view.addConstraint(constTop)

    constL = NSLayoutConstraint(item: button2, attribute: NSLayoutAttribute.Leading, relatedBy: NSLayoutRelation.Equal, toItem: ContentView, attribute: NSLayoutAttribute.Leading, multiplier: 1, constant: 20)
    view.addConstraint(constL)

    constR = NSLayoutConstraint(item: button2, attribute: NSLayoutAttribute.Trailing, relatedBy: NSLayoutRelation.Equal, toItem: ContentView, attribute: NSLayoutAttribute.Trailing, multiplier: 1, constant: -20)
    view.addConstraint(constR)

    constH = NSLayoutConstraint(item: button2, attribute: NSLayoutAttribute.Height, relatedBy: NSLayoutRelation.Equal, toItem: nil, attribute: NSLayoutAttribute.NotAnAttribute, multiplier: 1, constant: 50)
    button2.addConstraint(constH)


    button3.setTranslatesAutoresizingMaskIntoConstraints(false)

    constX = NSLayoutConstraint(item: button3, attribute: NSLayoutAttribute.CenterX, relatedBy: NSLayoutRelation.Equal, toItem: ContentView, attribute: NSLayoutAttribute.CenterX, multiplier: 1, constant: 0)
    view.addConstraint(constX)

    constL = NSLayoutConstraint(item: button3, attribute: NSLayoutAttribute.Leading, relatedBy: NSLayoutRelation.Equal, toItem: ContentView, attribute: NSLayoutAttribute.Leading, multiplier: 1, constant: 20)
    view.addConstraint(constL)

    constR = NSLayoutConstraint(item: button3, attribute: NSLayoutAttribute.Trailing, relatedBy: NSLayoutRelation.Equal, toItem: ContentView, attribute: NSLayoutAttribute.Trailing, multiplier: 1, constant: -20)
    view.addConstraint(constR)

    constTop = NSLayoutConstraint(item: button3, attribute: NSLayoutAttribute.Top, relatedBy: NSLayoutRelation.Equal, toItem: button2, attribute: NSLayoutAttribute.Bottom, multiplier: 1, constant: 20)
    view.addConstraint(constTop)

    constH = NSLayoutConstraint(item: button3, attribute: NSLayoutAttribute.Height, relatedBy: NSLayoutRelation.Equal, toItem: nil, attribute: NSLayoutAttribute.NotAnAttribute, multiplier: 1, constant: 50)
    button3.addConstraint(constH)

    button4.setTranslatesAutoresizingMaskIntoConstraints(false)

    constX = NSLayoutConstraint(item: button4, attribute: NSLayoutAttribute.CenterX, relatedBy: NSLayoutRelation.Equal, toItem: ContentView, attribute: NSLayoutAttribute.CenterX, multiplier: 1, constant: 0)
    view.addConstraint(constX)

    constTop = NSLayoutConstraint(item: button4, attribute: NSLayoutAttribute.Top, relatedBy: NSLayoutRelation.Equal, toItem: button3, attribute: NSLayoutAttribute.Bottom, multiplier: 1, constant: 10)
    view.addConstraint(constTop)

    var constBottom = NSLayoutConstraint(item: button4, attribute: NSLayoutAttribute.Bottom, relatedBy: NSLayoutRelation.Equal, toItem: ContentView, attribute: NSLayoutAttribute.Bottom, multiplier: 1, constant: -20)
    view.addConstraint(constBottom)

    constL = NSLayoutConstraint(item: button4, attribute: NSLayoutAttribute.Leading, relatedBy: NSLayoutRelation.Equal, toItem: ContentView, attribute: NSLayoutAttribute.Leading, multiplier: 1, constant: 20)
    view.addConstraint(constL)

    constR = NSLayoutConstraint(item: button4, attribute: NSLayoutAttribute.Trailing, relatedBy: NSLayoutRelation.Equal, toItem: ContentView, attribute: NSLayoutAttribute.Trailing, multiplier: 1, constant: -20)
    view.addConstraint(constR)

    constH = NSLayoutConstraint(item: button4, attribute: NSLayoutAttribute.Height, relatedBy: NSLayoutRelation.Equal, toItem: nil, attribute: NSLayoutAttribute.NotAnAttribute, multiplier: 1, constant:50)
    button4.addConstraint(constH)

所以有 4 个按钮,限制在它们自己和 button1.top 到 Contentview.Top 和 button4.Bottom 到 ContentView.Bottom

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-03-12
    • 2019-05-19
    • 1970-01-01
    • 1970-01-01
    • 2016-04-05
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多