【问题标题】:how do i set dynamic constraint for buttons in objective c我如何为目标c中的按钮设置动态约束
【发布时间】:2017-12-24 22:53:31
【问题描述】:

我有一个简单的 UIView,它有两个名为“Button1”和“Button2”的按钮。 在某些条件下(假设 X 条件),我需要显示两个按钮,如图 1 所示。

在另一个条件下(假设 Y 条件),我需要隐藏“Button2”并将其放置在 UIView 的中心,如图 2 所示。

如果你能给我举个例子,那对我很有帮助。 我只需要为 iPhone 客观地执行此操作。

谢谢

【问题讨论】:

  • 当您将它们放在(水平)堆栈视图中时,它不会起作用吗?否则,您可以在按钮 1 的左侧设置两个约束。约束 A 到按钮 2,约束 B 到父级边缘,优先级低于约束 A。隐藏按钮 2 时,还应该禁用约束 A...
  • @H. de Jonge - 不想使用堆栈视图。

标签: ios objective-c button constraints


【解决方案1】:

我已经完成了 3 个按钮

你需要给出以下约束..

  • btn1 通向它的父视图

    btn2 导致 btn1 尾随

    btn3 导致 btn2 尾随

    btn3 跟踪到它的父视图

    btn1 与 btn2 等宽 -> 优先级 999

    btn2 与 btn3 等宽 -> 优先级 999

    btn1 top to its superview -> 优先级 999

    btn2 top to its superview

    btn3 顶到它的父视图

    btn1 width Constraint -> Priority : 750 , constant -> 0 Take IBOutlet

对于所有 3 个按钮,您还需要给出高度限制。

此后当条件 Y 发生时

设置 btn1 宽度约束优先级:1000 就完成了

【讨论】:

    【解决方案2】:

    为此,您需要有两组约束,每个布局一组(一个按钮和两个按钮)。当视图应该改变时,您将在这些集合之间切换。

    当您想要切换时,您需要停用第一个并激活第二个。您可以使用deactivateConstraints:activateConstraints: 来执行此操作。对于只有一个按钮的布局,您还需要通过调用 removeFromSuperview 从视图中删除第二个按钮(并在切换回显示两个按钮时重新添加)。

    如果您使用的是 Interface Builder,则需要为在那里创建的约束创建 IBOutlets,以便您可以访问它们。您可能还想在 Interface Builder 中只创建一组约束,因为如果它们同时处于活动状态,它们会相互冲突。

    如果您不熟悉如何在代码中创建约束,这可能会对您有所帮助Programmatically Creating Constraints

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-02-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-07-20
      相关资源
      最近更新 更多