我在一个superview中创建了两个view,然后在view之间添加了约束:
_indicatorConstrainWidth = [NSLayoutConstraint constraintWithItem:self.view1 attribute:NSLayoutAttributeWidth relatedBy:NSLayoutRelationEqual toItem:self.view2 attribute:NSLayoutAttributeWidth multiplier:1.0f constant:0.0f];
[_indicatorConstrainWidth setPriority:UILayoutPriorityDefaultLow];
_indicatorConstrainHeight = [NSLayoutConstraint constraintWithItem:self.view1 attribute:NSLayoutAttributeHeight relatedBy:NSLayoutRelationEqual toItem:self.view2 attribute:NSLayoutAttributeHeight multiplier:1.0f constant:0.0f];
[_indicatorConstrainHeight setPriority:UILayoutPriorityDefaultLow];
[self addConstraint:_indicatorConstrainWidth];
[self addConstraint:_indicatorConstrainHeight];
现在我想用动画更改乘数属性,但我不知道如何更改乘数属性。 (我在头文件 NSLayoutConstraint.h 的私有(private)属性中找到了 _coefficient,但它是私有(private)的。)
如何更改多重属性?
我的解决方法是删除旧约束并为 multipler
添加具有不同值的新约束。
最佳答案
这是 Swift 中的一个 NSLayoutConstraint 扩展,它可以很容易地设置一个新的乘数:
在 Swift 3.0+ 中
import UIKit
extension NSLayoutConstraint {
/**
Change multiplier constraint
- parameter multiplier: CGFloat
- returns: NSLayoutConstraint
*/
func setMultiplier(multiplier:CGFloat) -> NSLayoutConstraint {
NSLayoutConstraint.deactivate([self])
let newConstraint = NSLayoutConstraint(
item: firstItem,
attribute: firstAttribute,
relatedBy: relation,
toItem: secondItem,
attribute: secondAttribute,
multiplier: multiplier,
constant: constant)
newConstraint.priority = priority
newConstraint.shouldBeArchived = self.shouldBeArchived
newConstraint.identifier = self.identifier
NSLayoutConstraint.activate([newConstraint])
return newConstraint
}
}
演示用法:
@IBOutlet weak var myDemoConstraint:NSLayoutConstraint!
override func viewDidLoad() {
let newMultiplier:CGFloat = 0.80
myDemoConstraint = myDemoConstraint.setMultiplier(newMultiplier)
//If later in view lifecycle, you may need to call view.layoutIfNeeded()
}
https://stackoverflow.com/questions/19593641/
相关文章:
objective-c - 是否可以在 Obj-C 中使用 Swift 的枚举?
ios - 如何以简单的方式将 CGPoint 对象添加到 NSArray?
objective-c - 在 Objective-C 中加入一个数组
iphone - 如何使用可选方法创建协议(protocol)?
ios - 如何在 View 出现之前滚动到 iPhone 上 UITableView 的底部
ios - UITableViewCell 分隔符在 iOS7 中消失
iphone - 如何处理包含属性的 Objective-C 协议(protocol)?