#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 к любому объекту, который вы хотели бы отобразить в виде идеального круга.