Радиус угла UIProgressView изменяется при обновлении прогресса

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

Кто-нибудь знает, что здесь происходит? Любые мысли будут действительно полезны, спасибо!

Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
1
0
179
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

UIProgressView имеет свою стандартную высоту, и ее не следует менять. Когда вы устанавливаете пользовательские ограничения, вы, вероятно, нарушаете исходные ограничения, которые есть в представлении прогресса. Ваш пользовательский радиус угла, вероятно, переопределяется каждый раз, когда UIProgressView перезагружает свой макет с помощью layoutSubviews() и устанавливает его на 50% от текущей высоты.

Я вижу два решения этой проблемы.

1. Пользовательский вид прогресса (предпочтительно)

Это был бы предпочтительный выбор, просто создайте собственный вид прогресса и не беспокойтесь о нарушении каких-либо ограничений и изменении углов!

2. Продолжайте сопротивляться

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 и реализовать свое собственное представление, где вы устанавливаете правила :) Удачи!

Другие вопросы по теме

Похожие вопросы