#ios #swift #uiimageview #tvos #uistackview
#iOS #swift #uiimageview #tvos #uistackview
Вопрос:
У меня есть это представление стека, оно содержит один ImageView:
если я печатаю его высоту, я всегда получаю 0:
print("movieDetailsStackView!.bounds.height: ",movieDetailsStackView!.bounds.height ) // 0
print("movieDetailsStackView!.frame.height: ",movieDetailsStackView!.frame.height ) // 0
Вот как это создается:
func createMovieDetailsStackView () {
/******************/
// Add movie image
/*****************/
let movieImageViewHeight = 300.00
let movieImageViewWidth = 20.00
movieImageView = UIImageView(frame: CGRect(x: 0, y: 0, width: movieImageViewWidth, height: movieImageViewHeight));
movieImageView!.layer.borderWidth = 10
movieImageView!.layer.borderColor = UIColor.red.cgColor
/******************/
var arrangedSubviews = [UIView]()
arrangedSubviews.append(movieImageView!)
movieDetailsStackView = UIStackView(arrangedSubviews: arrangedSubviews)
movieDetailsStackView!.translatesAutoresizingMaskIntoConstraints = false
movieDetailsStackView!.distribution = .fillProportionally
movieDetailsStackView!.axis = .horizontal
movieDetailsStackView!.spacing = 8
self.view.addSubview(movieDetailsStackView!)
movieDetailsStackView!.topAnchor.constraint(equalTo: self.view.topAnchor, constant:70).isActive = true
movieDetailsStackView!.leftAnchor.constraint(equalTo: self.view.leftAnchor, constant: 0).isActive = true
movieDetailsStackView!.rightAnchor.constraint(equalTo: self.view.rightAnchor, constant: 0).isActive = true
}
Есть ли какое-либо объяснение этому?
Комментарии:
1. Вы также пытались добавить ограничение высоты в представление стека? тот, который равен movieImageViewHeight
Ответ №1:
Когда вы добавляете какое-либо представление в качестве arrangedSubview
представления стека, его .translatesAutoresizingMaskIntoConstraints
свойству автоматически присваивается значение `false.
Итак, в зависимости от того, как у вас установлены свойства выравнивания и распределения вашего стекового представления, вам может потребоваться добавить ограничения ширины и / или высоты для представления.
У вас есть некоторые странные настройки в коде, который вы показали, например:
let movieImageViewWidth = 20.00
… вы действительно хотите, чтобы он был шириной всего 20 пунктов?movieDetailsStackView!.distribution = .fillProportionally
… это почти наверняка НЕ то, что вы хотите для распространения. Начните с.fill
и измените это только в том случае, если вы не получаете желаемого результата.- вы используете много
!
… «принудительное разворачивание» — это путь к сбоям.
Однако с вашим существующим кодом добавьте эту строку:
movieDetailsStackView = UIStackView(arrangedSubviews: arrangedSubviews)
// add this line here
movieImageView?.heightAnchor.constraint(equalToConstant: CGFloat(movieImageViewHeight)).isActive = true
и посмотрите, получите ли вы желаемый результат.