У меня есть 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()
Я ожидаю, что ширина окна завершения будет примерно равна 150, но вместо этого она равна 350, что соответствует исходной ширине.
Я думаю, что происходит, вид не обновляется после того, как я установил ограничение на другое значение. Тем не менее, я не могу на всю жизнь заставить его обновить. Я хотел бы помочь здесь.