【问题标题】:how to change to before and after constraints when pressing button (swift code)?按下按钮时如何更改前后约束(swift代码)?
【发布时间】:2016-08-28 20:26:41
【问题描述】:

此代码有一个按钮,当按下按钮上方的蓝色方块时,它会变小。但是当再次按下按钮时,正方形不会恢复到原来的大小。这是因为按钮功能只有一个命令。如何通过仅按一个按钮来命令按钮在其原始尺寸和较小尺寸之间来回切换。这是快速代码。

//
//  ViewController.swift
//  ssfsfd
//
//  Created by John Zalubski on 8/28/16.
//  Copyright © 2016 John Zalubski. All rights reserved.
//

import UIKit

class ViewController: UIViewController {

    let colorview = UIView()
    var initialc = [NSLayoutConstraint]()
    override func viewDidLoad() {
        super.viewDidLoad()
        colorview.translatesAutoresizingMaskIntoConstraints = false
        colorview.backgroundColor = UIColor.blueColor()
        self.view.addSubview((colorview))

        let leadingc = colorview.leadingAnchor.constraintEqualToAnchor(self.view.leadingAnchor)
        let trailingC = colorview.trailingAnchor.constraintEqualToAnchor(self.view.trailingAnchor)
        let topc = colorview.topAnchor.constraintEqualToAnchor(self.view.topAnchor)
        let bottomc = colorview.bottomAnchor.constraintEqualToAnchor(self.view.bottomAnchor, constant: -50)

        initialc.appendContentsOf([leadingc,trailingC,topc,bottomc])
        NSLayoutConstraint.activateConstraints(initialc)


    }
    @IBAction func changethebleep(sender: AnyObject) {

        NSLayoutConstraint.deactivateConstraints(initialc)

        let widthc = colorview.widthAnchor.constraintEqualToConstant(100)
        let heightc = colorview.heightAnchor.constraintEqualToConstant(100)
        let centerxc = colorview.centerXAnchor.constraintEqualToAnchor(self.view.centerXAnchor)
        let centeryc = colorview.centerYAnchor.constraintEqualToAnchor(self.view.centerYAnchor)

        NSLayoutConstraint.activateConstraints([widthc,heightc,centerxc,centeryc])

    }

    override func didReceiveMemoryWarning() {
        super.didReceiveMemoryWarning()
        // Dispose of any resources that can be recreated.
    }


}

【问题讨论】:

  • 如果您发现某个答案解决了您的问题,请单击答案左侧的复选标记接受它。去解决你迄今为止提出的所有问题。

标签: swift button swift2 constraints action


【解决方案1】:

这是一种方法。将所有约束放在一个名为allc 的数组中。任何时候只有一半的约束会处于活动状态。

在您的按钮处理程序中,将活动约束更改为不活动,然后使之前不活动的约束变为活动:

class ViewController: UIViewController {

    let colorview = UIView()
    var allc = [NSLayoutConstraint]()
    override func viewDidLoad() {
        super.viewDidLoad()
        colorview.translatesAutoresizingMaskIntoConstraints = false
        colorview.backgroundColor = UIColor.blueColor()
        self.view.addSubview((colorview))

        let leadingc = colorview.leadingAnchor.constraintEqualToAnchor(self.view.leadingAnchor)
        let trailingC = colorview.trailingAnchor.constraintEqualToAnchor(self.view.trailingAnchor)
        let topc = colorview.topAnchor.constraintEqualToAnchor(self.view.topAnchor)
        let bottomc = colorview.bottomAnchor.constraintEqualToAnchor(self.view.bottomAnchor, constant: -50)

        NSLayoutConstraint.activateConstraints([leadingc, trailingC, topc, bottomc])

        let widthc = colorview.widthAnchor.constraintEqualToConstant(100)
        let heightc = colorview.heightAnchor.constraintEqualToConstant(100)
        let centerxc = colorview.centerXAnchor.constraintEqualToAnchor(self.view.centerXAnchor)
        let centeryc = colorview.centerYAnchor.constraintEqualToAnchor(self.view.centerYAnchor)

        allc = [leadingc, trailingC, topc, bottomc, widthc, heightc, centerxc, centeryc]
    }

    @IBAction func changethebleep(sender: AnyObject) {

        var newactive = [NSLayoutConstraint]()

        for constraint in allc {
            if constraint.active {
                constraint.active = false
            } else {
                newactive.append(constraint)
            }
        }

        NSLayoutConstraint.activateConstraints(newactive)
    }
}

注意:在激活新约束之前,必须先停用约束。如果您先停用,您将避免视图过度受限并且自动布局给出警告消息的情况。这就是代码将要激活的新约束放入数组中的原因,以便它可以在之前激活的约束被停用后激活它们。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-10-07
    • 2015-10-01
    • 1970-01-01
    • 2021-03-25
    • 2020-04-20
    • 2016-12-11
    • 1970-01-01
    • 2019-10-13
    相关资源
    最近更新 更多