iOS 视野宽度计算不正确
iOS width of view not calculating correctly
我有一个带有子视图的视图,该视图旨在向用户显示他们在游戏中获胜和失败的比例,如下所示:
绿色视图的宽度是通过将父视图的宽度乘以赢得游戏的分数(在本例中为 .5),并将绿色视图的宽度约束更改为计算值来计算的。
let percent = Float(won)/Float(self.partiesPlayed) //percent of games won, should be .5
let width = CGFloat(percent) * self.winLoseView.bounds.size.width //multiply width of superview by percent
self.greenWidthConstraint.constant = CGFloat(width) //change constraint's constant
UIView.animateWithDuration(2, animations: { // animate change
self.view.layoutIfNeeded()
})
问题是宽度似乎不完全正确,例如在这个例子中它似乎不正好是父视图的一半。
这是另一种方法:为什么不直接删除 greenWidthConstraint
并使用等于红色视图宽度的约束重新应用它,并将乘数设置为获胜百分比。这样,如果您支持旋转或任何其他大小更改,您就不必担心固定宽度值常量。我还没有达到 swift 的水平,但在 Objective-c 中:
[self.view removeConstraint:self.constraint];
self.constraint = [NSLayoutConstraint constraintWithItem:self.greenView
attribute:NSLayoutAttributeWidth
relatedBy:NSLayoutRelationEqual
toItem:self.redView
attribute:NSLayoutAttributeWidth
multiplier:PERCENTAGE
constant:0];
[self.view addConstraint:self.constraint];
// Animate the layoutIfNeeded....
这是 Swift 版本:(由@milesper 提供)
let percent = Float(won)/Float(self.partiesPlayed)
var constraint = NSLayoutConstraint(item: self.greenSection, attribute: NSLayoutAttribute.Width, relatedBy: NSLayoutRelation.Equal, toItem: self.winLoseView, attribute: NSLayoutAttribute.Width, multiplier: CGFloat(percent), constant: 0.0 as CGFloat)
self.view.addConstraint(constraint)
UIView.animateWithDuration(2, animations: {
self.view.layoutIfNeeded()
})
我有一个带有子视图的视图,该视图旨在向用户显示他们在游戏中获胜和失败的比例,如下所示:
let percent = Float(won)/Float(self.partiesPlayed) //percent of games won, should be .5
let width = CGFloat(percent) * self.winLoseView.bounds.size.width //multiply width of superview by percent
self.greenWidthConstraint.constant = CGFloat(width) //change constraint's constant
UIView.animateWithDuration(2, animations: { // animate change
self.view.layoutIfNeeded()
})
问题是宽度似乎不完全正确,例如在这个例子中它似乎不正好是父视图的一半。
这是另一种方法:为什么不直接删除 greenWidthConstraint
并使用等于红色视图宽度的约束重新应用它,并将乘数设置为获胜百分比。这样,如果您支持旋转或任何其他大小更改,您就不必担心固定宽度值常量。我还没有达到 swift 的水平,但在 Objective-c 中:
[self.view removeConstraint:self.constraint];
self.constraint = [NSLayoutConstraint constraintWithItem:self.greenView
attribute:NSLayoutAttributeWidth
relatedBy:NSLayoutRelationEqual
toItem:self.redView
attribute:NSLayoutAttributeWidth
multiplier:PERCENTAGE
constant:0];
[self.view addConstraint:self.constraint];
// Animate the layoutIfNeeded....
这是 Swift 版本:(由@milesper 提供)
let percent = Float(won)/Float(self.partiesPlayed)
var constraint = NSLayoutConstraint(item: self.greenSection, attribute: NSLayoutAttribute.Width, relatedBy: NSLayoutRelation.Equal, toItem: self.winLoseView, attribute: NSLayoutAttribute.Width, multiplier: CGFloat(percent), constant: 0.0 as CGFloat)
self.view.addConstraint(constraint)
UIView.animateWithDuration(2, animations: {
self.view.layoutIfNeeded()
})