#ios #swift #uiimageview
#iOS #swift #uiimageview
Вопрос:
Я пытаюсь получить округленный UIImageView
, но, похоже, он отображается по-разному на разных устройствах;
Выглядит так на iPhone Xr:
Выглядит так на iPhone 7:
У меня есть ограничение по высоте 60 и следующий код:
override func viewWillLayoutSubviews() {
super.viewWillLayoutSubviews()
self.userAvatar.layer.cornerRadius = self.userAvatar.frame.height / 2
self.userAvatar.layer.masksToBounds = false
self.userAvatar.clipsToBounds = true
self.userAvatar.layer.borderWidth = 0
}
Есть идеи?
Комментарии:
1. у вас есть ограничение по ширине или начало и конец?
2. Пожалуйста, установите равные ограничения по ВЫСОТЕ и ширине.
3. Я думаю, вы установили начальное и конечное ограничение, поэтому вместо начального / конечного набора только высота и ширина
Ответ №1:
Мне кажется, что вы задали начальные и конечные ограничения изображения вместо фиксированной ширины.
Чтобы получить окружность, укажите ширину изображения, равную высоте. Это происходит из-за разной ширины устройств.
Ответ №2:
Если вы управляете этим представлением с помощью конструктора интерфейса (например, раскадровки или XIB), вы можете принудительно придать квадратную форму (которая становится кругом в сочетании с уже имеющимися у вас закругленными углами) для представления непосредственно оттуда, определив ограничение для его соотношения сторон. Не нужно ничего кодировать.
Управление-перетащите (как вы делаете для создания выходов, действий и т. Д.) Из представления изображения в себя, И появится следующее всплывающее окно.
Выберите соотношение сторон, которое создаст ограничение, соответствующее текущему соотношению вида (в этом примере оно равно 15: 8). Если представление уже было квадратным, созданное ограничение уже должно быть правильным.
Если нет, вы можете найти это ограничение, щелкнув следующий значок (для инспектора размеров):
Оттуда вы можете дважды щелкнуть по этому ограничению, чтобы отредактировать его, и изменить множитель на 1: 1:
На самом деле, еще более простой вариант заключается в том, что после перетаскивания элемента управления из представления в само представление удерживайте нажатой клавишу Alt / Opt, и параметр, отображаемый во всплывающем окне, изменится на соотношение сторон (1: 1), что означает, что вы можете установить его прямо оттуда, даже не редактируя ограничение.
Ответ №3:
Ограничьте высоту равной ширине.
И создайте простой UIImageView
подкласс:
class RoundedImageView: UIImageView {
override func layoutSubviews() {
super.layoutSubviews()
layer.cornerRadius = bounds.height / 2
}
}
Фрейм может (и будет) меняться в зависимости от жизненного цикла представления. Обновление cornerRadius в layoutSubviews()
нем сохранит его «круглым».