- Java 双重比较
- java - 比较器与 Apache BeanComparator
- Objective-C 完成 block 导致额外的方法调用?
- database - RESTful URI 是否应该公开数据库主键?
我正在尝试以编程方式在 swift 中为乘数设置约束,当我设置值时,它只会给我错误,“无法分配给该表达式的结果”...
我用 IBOutlet 声明了 NSLayoutConstraint,然后设置乘数,就像我对另一个常量所做的一样,效果很好,但这个不会接受它...
@IBOutlet weak var clockWidthConstraint: NSLayoutConstraint!
override func updateViewConstraints() {
super.updateViewConstraints()
confirmTopConstraint.constant = 40.0
clockWidthConstraint.multiplier = 0.1 // Gives me the error!
}
有什么想法吗?
最佳答案
是的,是 read only:
var multiplier: CGFloat { get }
您只能在创建时指定乘数。相反,您可以在运行时更改非常量 constant
属性:
var constant: CGFloat
这需要一点努力,但要更改不可变属性,您必须创建一个新约束并复制除要更改的属性以外的所有内容。为此,我一直在尝试不同的技术,但目前正在探索这种形式:
let constraint = self.aspectRatioConstraint.with() {
(inout c:NSLayoutConstraint.Model) in
c.multiplier = self.aspectRatio }
或在更现实的环境中使用:
var aspectRatio:CGFloat = 1.0 { didSet {
// remove, update, and add constraint
self.removeConstraint(self.aspectRatioConstraint)
self.aspectRatioConstraint = self.aspectRatioConstraint.with() {
(inout c:NSLayoutConstraint.Model) in
c.multiplier = self.aspectRatio }
self.addConstraint(self.aspectRatioConstraint)
self.setNeedsLayout()
}}
支持代码在哪里:
extension NSLayoutConstraint {
class Model {
init(item view1: UIView, attribute attr1: NSLayoutAttribute,
relatedBy relation: NSLayoutRelation,
toItem view2: UIView?, attribute attr2: NSLayoutAttribute,
multiplier: CGFloat, constant c: CGFloat,
priority:UILayoutPriority = 1000) {
self.firstItem = view1
self.firstAttribute = attr1
self.relation = relation
self.secondItem = view2
self.secondAttribute = attr2
self.multiplier = multiplier
self.constant = c
self.priority = priority
}
var firstItem:UIView
var firstAttribute:NSLayoutAttribute
var relation:NSLayoutRelation
var secondItem:UIView?
var secondAttribute:NSLayoutAttribute
var multiplier:CGFloat = 1.0
var constant:CGFloat = 0
var priority:UILayoutPriority = 1000
}
func priority(priority:UILayoutPriority) -> NSLayoutConstraint {
self.priority = priority;
return self
}
func with(configure:(inout Model)->()) -> NSLayoutConstraint {
// build and configure model
var m = Model(
item: self.firstItem as! UIView, attribute: self.firstAttribute,
relatedBy: self.relation,
toItem: self.secondItem as? UIView, attribute: self.secondAttribute,
multiplier: self.multiplier, constant: self.constant)
configure(&m)
// build and return contraint from model
var constraint = NSLayoutConstraint(
item: m.firstItem, attribute: m.firstAttribute,
relatedBy: m.relation,
toItem: m.secondItem, attribute: m.secondAttribute,
multiplier: m.multiplier, constant: m.constant)
return constraint
}
}
关于ios - 无法以编程方式在 swift 中设置 NSLayoutConstraint 乘数...“无法分配给此表达式的结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27870540/
我正在使用 iPhone 6 Plus,并使用以下方法获取 UIView 的边界: let viewBounds = view.bounds // GIVES 736 x 414 (Points),
我正在尝试在 R 的 Quantstrat 包中运行回测策略。该工具是小麦 future ,以美分报价。合约规模为 5000 蒲式耳。因此,我添加了以下代码。 future(symbols,
我正在尝试在 R 的 Quantstrat 包中运行回测策略。该工具是小麦 future ,以美分报价。合约规模为 5000 蒲式耳。因此,我添加了以下代码。 future(symbols,
我是 JavaScript 新手。我想在 Javascript 中使用 prompt() 制作一个乘法器来获取数字 n,这是我们的乘法器,我想将从 1 到 n 的所有数字与 n 数字相乘。示例: 如果
TLDR:我正在寻找一种算法,它可以在知道以下情况的情况下返回可变数字数组的最小可能的最不常见乘数: 其中一个数字 我的数组的大小 数字可能的最小值和最大值 我正在使用音乐应用程序并遇到算法问题:当混
如何为 gluCylinder() 和 gluDisk() 等函数设置纹理坐标偏移和乘数? 因此,如果正常情况下纹理会从点 0 开始,我想将其设置为从点 0.6 或 3.2 等开始。乘数意味着纹理会变
我尝试向后移动文件中的位置,但仅当我移动 512 字节时它才有效,为什么? _file = CreateFile(path, GENERIC_WRITE | GE
我正在尝试以编程方式在 swift 中为乘数设置约束,当我设置值时,它只会给我错误,“无法分配给该表达式的结果”... 我用 IBOutlet 声明了 NSLayoutConstraint,然后设置乘
我是一名优秀的程序员,十分优秀!