Округленный UIImageView

#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() нем сохранит его «круглым».