[英]How to change Anchor-Style Constraint programmatically?
我進行了搜索,甚至提出了潛在的解決方案。 可悲的是,他們都沒有話。我試圖通過增加View的leadAnchor-Constraint來使其動畫化。
我這樣創建約束:
let margins = self.layoutMarginsGuide
horizontalConstraint = underline.leadingAnchor.constraintEqualToAnchor(margins.leadingAnchor)
然后編輯約束常量,如下所示:
func updateUnderlinePosition(offset:CGFloat, pageCount:Int) {
//Underline just over width of one Screen:
var underlineOffset = offset / CGFloat(pageCount)
//Add left margin:
let margins = self.layoutMarginsGuide
underlineOffset += 15
//reposition underlineview
horizontalConstraint.constant += underlineOffset
self.layoutIfNeeded()
}
為什么我會錯誤地告訴我約束存在沖突?
"<NSLayoutConstraint:0x7fca2b8c72c0 UIView:0x7fca29d1c830.leading == UILayoutGuide:0x7fca2b8c4970'UIViewLayoutMarginsGuide'.leading>",
"<NSLayoutConstraint:0x7fca29c2ccd0 UIView:0x7fca29d1c830.leading == UILayoutGuide:0x7fca2b8c4970'UIViewLayoutMarginsGuide'.leading + 16.25>"
編輯:
約束是這樣創建的:
override func layoutSubviews() {
super.layoutSubviews()
//underline.frame = CGRectMake(15, self.frame.height-10, 40, 2)
underline.translatesAutoresizingMaskIntoConstraints = false
underline.backgroundColor = UIColor.whiteColor()
underline.layer.cornerRadius = 1.0
self.addSubview(underline)
print(self.backItem)
let margins = self.layoutMarginsGuide
horizontalConstraint = underline.leadingAnchor.constraintEqualToAnchor(margins.leadingAnchor)
let verticalConstraint = underline.centerYAnchor.constraintEqualToAnchor(margins.bottomAnchor)
let widthConstraint = underline.widthAnchor.constraintEqualToAnchor(nil, constant: 40)
let heightConstraint = underline.heightAnchor.constraintEqualToAnchor(nil, constant: 2)
NSLayoutConstraint.activateConstraints([horizontalConstraint, verticalConstraint, widthConstraint, heightConstraint])
}
檢查layoutSubviews是否被調用兩次
問題是您要在layoutSubviews
中添加約束,可以多次調用該約束。 您一次實例化underline
,但是可以多次調用layoutSubviews
,引用underline
的同一實例,從而在此過程中丟失了對原始horizontalConstraint
引用。
坦白說,添加子視圖和約束並不真正屬於layoutSubviews
。 您應該在實例化underline
視圖的地方設置約束,可以在適當的視圖init
方法或awakeFromNIB
進行約束。 這取決於如何實例化視圖。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.