我对自动布局和约束不是很熟悉。 我已经构建了一个包含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个视图折叠时。
您将如何实现这一目标?
非常感谢您的帮助。
最诚挚的问候。
答案 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