Закругленные углы обрезаны в UIImageView

Я пытаюсь скруглить углы своего UIImageView в tableViewCells, однако по какой-то причине они обрезаны. Я пробовал это:

cell.characterThumbnail.layer.masksToBounds = true
cell.characterThumbnail.layer.cornerRadius = 15

и вот результат, который я получаю:

Закругленные углы обрезаны в UIImageView

Если я использую отладочную программу 3D-просмотра, я получаю кадр больше, чем я установил (я хочу 84 * 84, но он показывает 84 * 110). Здесь показано:

Закругленные углы обрезаны в UIImageView

Почему бывают разные размеры? А почему скругленные углы обрезаны? Я должен указать, что изображение в UIImageView загружается с URL-адреса для каждого эскиза.

Любая помощь по этому поводу приветствуется. Меня это беспокоит целую неделю, смеется.

P.S. Я забыл упомянуть, что я прочитал почти все вопросы о «закругленных углах» здесь, на SO, и в других местах в Интернете, но не упоминал об обрезанных углах. Кроме того, я подумал об округлении фактического изображения перед его отображением в UIImageView, но это делает прокрутку tableView рывками.

Обновлено: весь проект на https://github.com/Aecasorg/WoWilvlChecker

imageview clipsToBound?

Prashant Tukadiya 20.09.2018 09:50

установить клетка. персонаж. clipsToBound = true

Sh_Khan 20.09.2018 09:50

Попробуйте реализовать это поведение в примере проекта (со связанными изображениями). Думаю, у вас здесь комплекс ошибок.

Andrew Romanov 20.09.2018 09:51

@PrashantTukadiya Ага, пробовал раньше. Нет разницы.

Aecasorg 20.09.2018 09:54

Вы можете разместить пример проекта на GitHub, и кто-нибудь сможет его посмотреть.

Andrew Romanov 20.09.2018 09:54

@AndrewRomanov Вот весь проект: [github.com/Aecasorg/WoWilvlChecker] Я также добавил ссылку на вышеупомянутый вопрос.

Aecasorg 20.09.2018 09:58

Клипы для привязки должны работать. Вы добавляете тень или границу?

Prashant Tukadiya 20.09.2018 09:59

@PrashantTukadiya Ни границ, ни теней. Я хочу, чтобы все было просто. Закругленные углы есть, но они «подрезаны».

Aecasorg 20.09.2018 10:04

Если эскизы имеют размер 84 x 84, но ваш кадр imageView имеет размер 84 x 110, вам необходимо установить aspectFill, а не aspectFit. Это полностью заполнит рамку. См. Ответ ниже.

JonJ 20.09.2018 10:09

не могу построить ваш пример "SwipeCellKit" недоступен. Кроме того, прямая ссылка неверна.

Andrew Romanov 20.09.2018 10:15

@AndrewRomanov сейчас разбираю и обновляю. Дай мне пару минут ...

Aecasorg 20.09.2018 10:30

@AndrewRomanov Хорошо, сейчас я загружаю все обновленные модули в репозиторий GitHub. Пройдет еще 20 минут до завершения (медленный аплинк).

Aecasorg 20.09.2018 10:53

@AndrewRomanov Ок, все обновилось.

Aecasorg 20.09.2018 11:22

Проект github недоступен.

Swapnil Luktuke 20.09.2018 13:18

Извините, правильная ссылка должна быть: github.com/Aecasorg/WoWilvlChecker

Aecasorg 20.09.2018 15:27
Стоит ли изучать 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 называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
3
15
1 700
6
Перейти к ответу Данный вопрос помечен как решенный

Ответы 6

Проблема в том, что круглый угол рисуется на 84X110, а не на 84X84. Вот почему это выглядит странно.

Пожалуйста, вызовите sizeToFit() (это изменяет размер и перемещает представление получателя, так что оно просто включает его подвиды.).

cell.characterThumbnail.sizeToFit()
cell.characterThumbnail.clipsToBound = true

прямо перед

cell.characterThumbnail.layer.masksToBounds = true
cell.characterThumbnail.layer.cornerRadius = 15

Однако, если вы хотите сохранить фиксированный просмотр эскизов 84X84 и изменить размер изображения, вам необходимо установить aspectFill. И в раскадровке (WoWilvlChecker) исправьте ширину и высоту вида на 84X84

Также я думаю, что значение cornerRadius не обязательно должно быть 15. Значения вроде 3-5 должно быть достаточно.

Я просто попытался поставить cell.characterThumbnail.sizeToFit() перед указанным выше, но, к сожалению, без разницы. Спасибо хоть.

Aecasorg 20.09.2018 09:52

Пожалуйста, также добавьте ячейку. персонаж. clipsToBound = true. Надеюсь, это поможет.

Rizwan 20.09.2018 09:52

Когда вы вызываете sizeToFit (). Увеличивается ли размер изображения до 84X84 (равный размеру изображения) ИЛИ он остается 84X110? Проблема, которую вы видите, заключается в том, что скругленный угол получается нарисованным, но на 84X110, а не на 84X84. Вот почему это выглядит странно

Rizwan 20.09.2018 09:59

Они остаются 84х110. Весь проект здесь: [github.com/Aecasorg/WoWilvlChecker]

Aecasorg 20.09.2018 10:01

84X110 - актуальная проблема. Я посмотрю на ссылку github

Rizwan 20.09.2018 10:04

Позвольте нам продолжить обсуждение в чате.

Rizwan 20.09.2018 10:07

Я подозреваю, что для ваших изображений установлено значение «aspectFit», а не aspectFill:

Я изменил его на AspectFill в раскадровке, и у меня есть clipsToBounds, но без разницы. Спасибо хоть!

Aecasorg 20.09.2018 10:09

Я проверил ваше репо.

Удалите ограничение centerY, похоже, что centerY вызывает эту проблему "растянутой высоты".

Если вы хотите применить размер imageView,

затем установите ширину, высоту (centerX, CenterY) или (вертикальный, горизонтальный)

Большой! Мы куда-то идем! Теперь у меня закругленные углы, но они смещены вниз. Просто нужно решить, как центрировать UIImageView в ячейке. Не совсем уверен, как применить размер согласно вашему предложению.

Aecasorg 20.09.2018 16:14

Вы можете делать по-разному, я бы сделал так. 1. Сохраните centerY в leftLabel (извините за путаницу) 2. Удалите bottom to leftLabel 3. Удалите imageView, ведущий к leftLabel + offset 4. Сделайте centerX равным leftLabel + offset + (imageWidth / 2)

Sung-Jong Will Kim 20.09.2018 16:40

Более конкретно, у вас была проблема «растянутой высоты» из-за двух ограничений: centerY и метки снизу налево. С помощью этих двух комбинаций создатель ограничений вычисляет верхнюю привязку imageView, которая равна верхней привязке leftLabel, делая ту же высоту с leftLabel.

Sung-Jong Will Kim 20.09.2018 16:46

Спасибо! Я посмотрю на это, как только вернусь сегодня вечером. Я дам вам знать, как это происходит.

Aecasorg 20.09.2018 17:13

Да, это было из-за ограничений. Все, что мне нужно, - это избавиться от ведущего пространства в: Superview и Bottom View в: Superview и добавить центр выравнивания Y в: Superview, и это отсортировано (еще раз спасибо @Andrew Romanov за запрос на перенос).

Aecasorg 21.09.2018 08:01

Вы должны установить clipsToBounds в true и задать ему желаемый радиус.

cell.image.contentMode = .ScaleAspectFill
cell.image.layer.cornerRadius = 10
cell.image.clipsToBounds = true

//Use this to add border 

cell.image.layer.borderWidth = 3
cell.image.layer.borderColor = UIColor.whiteColor().CGColor

У проекта есть проблемы с ограничениями макета и режимом содержимого в imageView.
Просто добавьте ограничение высоты для imageView и измените режим содержимого на Aspect fill. Также рекомендую использовать меньший радиус закругления, например 5.0. Вы можете проверить мои изменения в запросе на перенос.

Спасибо за пул-реквест! Очень признателен!

Aecasorg 20.09.2018 19:58
Ответ принят как подходящий

Все из-за ограничений. Все, что мне было нужно, это избавиться от ограничений «Ведущее пространство до: Супервизор» и «Вид снизу до: Супервизор», которые я установил, и добавить «Выровнять центр Y к: Супервизор», и это отсортировало его. Спасибо всем за отзывы и предложения!

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