我有一个菜单栏,它位于CollectionViewController的顶部,有几个不同的标题,高约30像素 。每个标题下方都有一个小条,指示用户所在的页面/项目,类似于Youtube应用程序。
class MenuBar : UIView {
var menuSectionTitles = ["Title1","Title2", "Title3","Title4"]
var numberOfSectionsInHorizontalBar : CGFloat?
var horizontalBarLeftAnchorConstraint: NSLayoutConstraint?
var horizontalBarWidthAnchorConstraint: NSLayoutConstraint?
override init(frame: CGRect) {
super.init(frame: frame)
setupHorizontalBar()
}
required init?(coder aDecoder: NSCoder) {
fatalError("init(coder:) has not been implemented")
}
func setupHorizontalBar() {
let horizontalBarView = UIView()
horizontalBarView.backgroundColor = UIColor.rgb(10, green: 150, blue: 255)
horizontalBarView.translatesAutoresizingMaskIntoConstraints = false
addSubview(horizontalBarView)
horizontalBarLeftAnchorConstraint = horizontalBarView.leftAnchor.constraint(equalTo: self.leftAnchor)
horizontalBarLeftAnchorConstraint?.isActive = true
horizontalBarView.bottomAnchor.constraint(equalTo: self.bottomAnchor).isActive = true
// Set the multiplier/width of the horizontal bar to indicate which page the user is on
horizontalBarWidthAnchorConstraint = horizontalBarView.widthAnchor.constraint(equalTo: widthAnchor, multiplier: 1 / 4)
horizontalBarWidthAnchorConstraint?.isActive = true
horizontalBarView.heightAnchor.constraint(equalToConstant: 3).isActive = true
}
}
horizontalBarWidthAnchorConstraint
的乘数值硬编码为1/4
我希望在不同的视图控制器中多次重复使用该视图,因此尝试更改horizontalBarWidthAnchorConstraint
的乘数,如下所示:
class ViewController: UICollectionViewController {
lazy var menuBar : MenuBar = {
let mb = OptionsBar()
mb.menuOptions = ["Title1", "Title2", "Title3"]
mb.translatesAutoresizingMaskIntoConstraints = false
mb.horizontalBarWidthAnchorConstraint?.constant = 1/3
return mb
}()
}
但这种方法不起作用。我找不到从ViewController内部更改乘数值的方法。
答案 0 :(得分:1)
在此处的代码中,您要更改约束的multiplier
,而不是multiplier
。这是对的吗?
另请注意,约束的multiplier
是只读的。你无法改变它。如果要更改应用于视图的约束的constant
,那么唯一要做的就是使用新的乘数添加新约束并删除旧约束。
读/写约束的唯一部分是{{1}}属性。