ios - 以编程方式扩展组件以进行自动布局

标签 ios autolayout constraints expand

我有一个包含三个组件的 View 。在界面生成器中,我将所有三个设置为等宽。

在代码中,我想在某些情况下隐藏中间的组件,然后将其余两个组件展开以占用额外的空间。我试图将中间组件的宽度约束暴露给代码,然后将约束的“常量”属性设置为 0,但这是行不通的。

谁能告诉我是否有一种简单的方法可以实现我的目标?

谢谢

Please see the attached screen mockup for the idea

最佳答案

您是否考虑过将所有三个组件嵌入到 UIStackview 中? ?您可以将分布设置为 fillEqually,然后只使用 removeArrangedSubView 来执行您正在谈论的事情。不用担心约束。这是一个非常简单的示例(只需在 Storyboard 上添加堆栈 View 和按钮):

class ViewController: UIViewController {

    @IBOutlet weak var stackView: UIStackView!

    let view1 = UIView()
    let view2 = UIView()
    let view3 = UIView()

    override func viewDidLoad() {
        super.viewDidLoad()
        // Do any additional setup after loading the view, typically from a nib.

        stackView.distribution = .fillEqually

        view1.backgroundColor = .red
        stackView.addArrangedSubview(view1)

        view2.backgroundColor = .green
        stackView.addArrangedSubview(view2)

        view3.backgroundColor = .blue
        stackView.addArrangedSubview(view3)
    }

    @IBAction func remove(_ sender: Any) {
        stackView.removeArrangedSubview(view2)
    }
}

关于ios - 以编程方式扩展组件以进行自动布局,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49947137/

相关文章:

c# - C#.NET 中 liskov 原则的类型参数约束

ios - 在更新和同步到iCloud时将程序数据保留在iOS应用中

ios - 如果 VC 在设备平放时加载 Swift,则设备方向会失败

ios - 在 iPhone X 中叠加时 UIView 的顶部位置不佳

ios - 在显示 View 之前根据特定宽度获取 UIView 的高度

ios - 如何在 Xcode 中构建响应式布局(不是自动布局)?

ios - 在函数外部传递变量以在 Swift 3 中使用

ios - Cordova 平台添加 ios - 错误命令失败,退出代码为 2

ios - 了解自动布局中的 "greater than or equal"和 "less than or equal"

ios - 在 iOS 中使用自动布局并排放置多个图标的最佳方式