Я установил радиус угла прогресса, используя layer.cornerRadius (0.2) и clipsToBounds (true). Однако, когда я использую оповещение для обновления прогресса, изменяется радиус угла. Если я закрою и снова открою приложение, радиус угла снова будет правильным.
Кто-нибудь знает, что здесь происходит? Любые мысли будут действительно полезны, спасибо!





UIProgressView имеет свою стандартную высоту, и ее не следует менять. Когда вы устанавливаете пользовательские ограничения, вы, вероятно, нарушаете исходные ограничения, которые есть в представлении прогресса. Ваш пользовательский радиус угла, вероятно, переопределяется каждый раз, когда UIProgressView перезагружает свой макет с помощью layoutSubviews() и устанавливает его на 50% от текущей высоты.
Я вижу два решения этой проблемы.
Это был бы предпочтительный выбор, просто создайте собственный вид прогресса и не беспокойтесь о нарушении каких-либо ограничений и изменении углов!
UIProgressView, вероятно, меняет свои углы в течение долгого времени layoutSubviews() вызывается, поэтому вы можете попытаться вернуть его к желаемым значениям, переопределив метод в вашем представлении/ячейке.
override func layoutSubviews() {
super.layoutSubviews()
greenBar.layer.cornerRadius = 0.2
redBar.layer.cornerRadius = 0.2
}
Если этого недостаточно, попробуйте разные места, например layoutIfNeeded() из prepareForReuse() и т. д.
В качестве альтернативы использованию ограничений для высоты вы могли бы преобразовать, но тогда индикатор выполнения выглядит довольно забавно по бокам.
// x: 1 - keeps the dimention the same size
// y: 10 - makes the height 10x bigger
greenBar.transform = CGAffineTransform(scaleX: 1, y: 10)
Второе решение не очень хороший совет, так как вы будете постоянно бороться с исходной реализацией. UIProgressView не предназначен для использования так, как вы его используете, поэтому я настоятельно рекомендую попробовать решение 1 и реализовать свое собственное представление, где вы устанавливаете правила :) Удачи!