Ios Swift:尽管添加了元素,但视图高度始终为0

Ios Swift:尽管添加了元素,但视图高度始终为0,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

我有这个堆栈视图,它包含一个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
    
}

对此有什么解释吗?

当您将任何视图添加为堆栈视图的
排列子视图时,其
属性translatesAutoResizezingMaskintoConstraints
会自动设置为“false”

因此,根据堆栈视图的对齐和分布属性的设置方式,可能需要向视图添加宽度和/或高度约束

您在显示的代码中有一些奇怪的设置,例如:

  • 让movieImageViewWidth=20.00
    。。。你真的希望它只有20分宽吗
  • moviedetailssstackview!。分布=.Fill按比例
    。。。这几乎肯定不是你想要的分销。从
    开始。填充
    ,只有在没有得到所需结果时才进行更改
  • 您正在使用大量的
    。。。“强制展开”是导致崩溃的秘诀
但是,使用现有代码,添加以下行:

movieDetailsStackView = UIStackView(arrangedSubviews: arrangedSubviews)

// add this line here
movieImageView?.heightAnchor.constraint(equalToConstant: CGFloat(movieImageViewHeight)).isActive = true

然后查看是否得到了所需的结果。

是否也尝试过向堆栈视图添加高度约束?与movieImageViewHeight相等的值