gpt4 book ai didi

ios - 我可以更改 NSLayoutConstraint 的乘数属性吗?

转载 作者:IT老高 更新时间:2023-10-28 12:19:06 27 4
gpt4 key购买 nike

我在一个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()
}

关于ios - 我可以更改 NSLayoutConstraint 的乘数属性吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19593641/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com