我有一个UIView,我希望通过使用百分比来确定宽度来获得一个简单的加载器视图。
我已经完成了百分比代码,并且知道它正在工作。
但是,我在设置视图的宽度约束时遇到了麻烦。我通过获取框架宽度并将其乘以百分比来找到宽度。我知道它的宽度正确。但是我似乎无法从此函数设置约束。
我的代码在UIView子类中是这样的:
func initSubviews() {
// in here i do some other stuff and have an asyncronous call to an api
// so then I've got this code calling the next function
DispatchQueue.main.async {
self.setCompletionWidth(nextTimer: nextTimer!, oldDate: oldDate!)
}
}
func setCompletionWidth(nextTimer: Date, oldDate: Date) {
let date = Date()
// calculatePercent returns something like 0.49
let percent = calculatePercent(middleDate: date, endDate: nextTimer, originalDate: oldDate)
//this is returning a correct value
let width = (self.frame.width)*percent
// completionView is the view I'm trying to change the width of
self.completionView.widthAnchor.constraint(equalToConstant: width)
self.layoutSubviews()
}
正在发生的是,完成视图没有获得正确的宽度。 我也尝试过setCompletionWidth函数
self.completionView.widthAnchor.constraint(equalToConstant: width)
containerView.layoutSubviews()
和
UIView.animate(withDuration: 0.2) {
self.completionView.widthAnchor.constraint(equalToConstant: width)
self.containerView.layoutSubviews()
//also tried self.layoutSubviews here
}
和
self.layoutIfNeeded()
self.completionView.widthAnchor.constraint(equalToConstant: width)
self.layoutIfNeeded()
我期望completionView的宽度大约为150,但实际上是350,这是它原来的宽度。
我认为正在发生的事情是,在将约束设置为其他值之后,视图没有更新。但是,我无法终生获得更新。我希望在这里有所帮助。
答案 0 :(得分:2)
您需要.isActive = true
self.completionView.widthAnchor.constraint(equalToConstant: width).isActive = true
还要更改宽度,您需要创建一个宽度变量,例如
var widthCon:NSLayoutConstraint!
widthCon = self.completionView.widthAnchor.constraint(equalToConstant: width)
widthCon.isActive = true
然后使用更改常量
widthCon.constant = /// some value
self.superview!.layoutIfNeeded()