Как изменить размер / исправить ограничения для circle на телефоне XR

#ios #swift #constraints #border #viewcontroller

#iOS #swift #ограничения #граница #viewcontroller

Вопрос:

Моя картинка для профиля пользователя выглядит нормально (круг) в старых версиях, но на телефоне XR моего друга она выглядит как овал. Я не уверен, почему. Ниже приведены фотографии ограничений раскадровки и мой код для ограничений.

Аватарка овальной формы
Ограничения раскадровки

 @IBOutlet weak var profileButton: UIButton!var profile: Profile?
var imagePicker: UIImagePickerController!
var setImage = false

override func viewDidLoad() {
    super.viewDidLoad()
    profileButton.layer.cornerRadius = 0.5 * profileButton.bounds.size.width
    profileButton.clipsToBounds = true

    ProfileService.show { [weak self] (profile) in
        self?.profile = profile

        //display profile image and remove ninja default image
        if let imageURL = URL(string: (profile?.imageURL ?? "")) {
            if self?.setImage == false {
                DispatchQueue.main.async {
                    self?.profileButton.setImage(nil, for: .normal)
                    self?.profileButton.kf.setBackgroundImage(with: imageURL, for: .normal)
                    self?.profileButton.layer.borderWidth = 0.5
                    self?.profileButton.layer.borderColor = UIColor.lightGray.cgColor
                }
            }
        }else{
            let image = UIImage(named: "ninja")
            self?.profileButton.setImage(image, for: .normal)
        }...
    }
}
  

Комментарии:

1. Кстати, profileButton.bounds ненадежен во время viewDidLoad . Часто вы задаете радиус угла в viewDidLayoutSubviews (или определяете UIButton подкласс, который делает это за вас самостоятельно layoutSubviews ).

Ответ №1:

Вы задаете ему противоречивые ограничения. Устанавливая как ширину, так и начальное и конечное смещения, что-то должно получаться, когда экран шире (на XR). Автоматическая компоновка явно решает нарушить ограничение ширины.

Я бы предложил избавиться от начальных и конечных ограничений и центрировать изображение профиля в представлении.

Ответ №2:

Проблема заключается в ваших начальных и конечных ограничениях. Если вы хотите, чтобы объект был центрирован, выровняйте его по ограничению center x вида. Еще одной хорошей привычкой было бы добавить ограничение на соотношение сторон 1: 1 к любому объекту, который вы хотели бы отобразить в виде идеального круга.