【问题标题】:How to add constrains in vertically aligned UIButtons in swift 2?如何在swift 2中的垂直对齐UIButton中添加约束?
【发布时间】:2016-12-15 03:45:51
【问题描述】:

我在 viewController 中有三个垂直对齐的 UIButton A、B、C。我想以编程方式在按钮 C 中添加约束,这样如果我隐藏/删除按钮 B,则 C 应该在 B 的位置,如果按钮 B 出现,则 C 应该在 B 旁边。如何以编程方式添加约束。

【问题讨论】:

  • 我理解第一部分,但第二个 C 应该在 B 旁边还是在 B 下?...
  • 不使用约束是不是很好,但我得到了需要的结果?
  • 我正在努力。
  • 您是否以编程方式添加按钮?如果是这样,我无法帮助你。如果您从情节提要中添加按钮,我会帮助您。
  • 尝试使用stackview,你可以简单地使用button.hidden=true。这是实现您想要的最简单的方法。

标签: ios swift uiviewcontroller uibutton


【解决方案1】:

注意:此版本不使用以编程方式应用的约束,但可以达到预期的结果!


我的Main.storyboard File 看起来像这样:


说明:我有 3 个按钮插座和一个按钮操作。当您按下隐藏按钮 B 按钮时,Button C 消失,但 Button B 收到标题 Button C 及其操作,隐藏按钮 B 变为 显示按钮 B。按钮的操作是Apressed()Bpressed()Cpressed()。您可以在其中添加自己的代码,我刚刚以backgroundColor() 为例。


import UIKit

class ViewController: UIViewController {

    @IBOutlet weak var buttonA: UIButton!
    @IBOutlet weak var buttonB: UIButton!
    @IBOutlet weak var buttonC: UIButton!
    var i = 0

    override func viewDidLoad() {
        super.viewDidLoad()
        buttonA.addTarget(self, action: #selector(ViewController.Apressed), for: UIControlEvents.touchUpInside)
        buttonB.addTarget(self, action: #selector(ViewController.Bpressed), for: UIControlEvents.touchUpInside)
        buttonC.addTarget(self, action: #selector(ViewController.Cpressed), for: UIControlEvents.touchUpInside)
        // Do any additional setup after loading the view, typically from a nib.
    }

    override func didReceiveMemoryWarning() {
        super.didReceiveMemoryWarning()
        // Dispose of any resources that can be recreated.
    }
    @IBAction func hideB(_ sender: AnyObject) {
        if i == 0{
        buttonC.isHidden = true
        buttonB.setTitle("Button C", for: .normal)
        buttonB.removeTarget(self, action: #selector(ViewController.Bpressed), for: .touchUpInside)
        buttonB.addTarget(self, action: #selector(ViewController.Cpressed), for: .touchUpInside)
        i += 1
        sender.setTitle("Show Button B", for: .normal)
        }
        else if i == 1{
            buttonC.isHidden = false
            buttonB.removeTarget(self, action: #selector(ViewController.Cpressed), for: .touchUpInside)
            buttonB.addTarget(self, action: #selector(ViewController.Bpressed), for: UIControlEvents.touchUpInside)
            buttonB.setTitle("Button B", for: .normal)
            i = 0
            sender.setTitle("Hide Button B", for: .normal)

        }

    }
    func Apressed(){
        self.view.backgroundColor = UIColor.red()
    }
    func Bpressed(){
        self.view.backgroundColor = UIColor.green()
    }
    func Cpressed(){
        self.view.backgroundColor = UIColor.yellow()
    }



}

最终结果:


【讨论】:

    【解决方案2】:

    我确实建议您首先通过 3 个按钮的情节提要(如果可能)设置所有约束,然后也通过约束设置固定高度。

    您可以创建一个@IBOutlet weak var bHeight: NSLayoutConstrait! 并将其附加到情节提要中的UIButton B Height(您也可以直接从here 的情节提要中查看如何执行此操作)。

    那么如果你强制bHeight.constant = 0你应该能够实现你的目标。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-10-01
      • 2019-04-27
      • 1970-01-01
      • 1970-01-01
      • 2022-12-19
      • 1970-01-01
      相关资源
      最近更新 更多