如何以编程方式扩展/折叠有约束的垂直UIView?

时间:2018-08-05 19:57:29

标签: ios swift constraints nsautolayout

我对自动布局和约束不是很熟悉。 我已经构建了一个包含7个子视图的视图,这些子视图具有约束以适合横向和纵向模式。一切都很好(参见图片)。

下面是用于第六个子视图的示例代码。 宽度约束具有mediumPriority,其他约束(左,顶部,底部)具有highPriority。

    6View = UIView()
    mainScrollView.addSubview(6View)
    6View.backgroundColor = UIColor(red: 120/255, green: 120/255, blue: 120/255, alpha: 1.0)
    6View.translatesAutoresizingMaskIntoConstraints = false

    // constraints
    let topConstraint = NSLayoutConstraint(item: 6View, attribute: .top, relatedBy: .equal, toItem: mainScrollView, attribute: .top, multiplier: 1, constant: kMainMargin)
    topConstraint.priority = highContraintPriority
    mainScrollView.addConstraint(topConstraint)

    let leftConstraint = NSLayoutConstraint(item: 6View, attribute: .left, relatedBy: .equal, toItem: day5View, attribute: .right, multiplier: 1, constant: kMainMargin)
    leftConstraint.priority = highContraintPriority
    mainScrollView.addConstraint(leftConstraint)

    let bottomConstraint = NSLayoutConstraint(item: 6View, attribute: .bottom, relatedBy: .equal, toItem: mainScrollView, attribute: .bottom, multiplier: 1, constant: kMainMargin)
    bottomConstraint.priority = highContraintPriority
    mainScrollView.addConstraint(bottomConstraint)

    let widthConstraint = NSLayoutConstraint(item: 6View, attribute: .width, relatedBy: .equal, toItem: mainScrollView, attribute: .width, multiplier: (1/7), constant: -1)
    widthConstraint.priority = mediumContraintPriority
    mainScrollView.addConstraint(widthConstraint)

现在,我想当我触摸7个视图中的任何一个以查看触摸的视图扩展(两倍大小)而其他6个视图折叠时。

您将如何实现这一目标?

非常感谢您的帮助。

最诚挚的问候。

enter image description here

1 个答案:

答案 0 :(得分:1)

引用每个视图的宽度约束,并单击它们。

widthConstraint.constant = // expanded value 

并将其设置为所有其他视图

otherwidthConstraint.constant = 0 

然后打电话

self.view.layoutIfNeeded()

您还可以将所有这些约束放入数组(var arrOfAllWidths = [NSLayoutConstraint]())中并执行

arrOfAllWidths.forEach { $0.constant = 0 }

然后获取被点击的视图的索引,说它是视图0

arrOfAllWidths[0].constant = // expanded value

也不需要优先级,并且在以编程方式为视图赋予约束时也不要忘记设置优先级

view6.translatesAutoresizingMaskIntoConstraints = false