更改约束的乘数值

时间:2016-12-20 11:50:07

标签: swift

我有一个菜单栏,它位于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内部更改乘数值的方法。

1 个答案:

答案 0 :(得分:1)

在此处的代码中,您要更改约束的multiplier,而不是multiplier。这是对的吗?

另请注意,约束的multiplier是只读的。你无法改变它。如果要更改应用于视图的约束的constant,那么唯一要做的就是使用新的乘数添加新约束并删除旧约束。

读/写约束的唯一部分是{{1}}属性。