我在代码中动态添加UIViews。有很多我想添加的视图。下面是一个示例:
let typeImage = UIImageView()
typeImage.translatesAutoresizingMaskIntoConstraints = false
rootView.addSubview(typeImage)
typeImage.widthAnchor.constraint(equalToConstant: 28).isActive = true
typeImage.heightAnchor.constraint(equalToConstant: 28).isActive = true
typeImage.leftAnchor.constraint(equalTo: rootView.leftAnchor, constant: 4).isActive = true
typeImage.topAnchor.constraint(equalTo: rootView.topAnchor, constant: 4).isActive = true
typeImage.backgroundColor = gh.myRed
typeImage.image = UIImage(named: "ic_question_bej")
我想要计算我添加的所有元素的总和,并最终将这个计数值设置为我的根视图高度。问题是
typeImage.frame.size.height
typeImage.bounds.size.height
始终返回0.0
那么如何通过代码获取新增UIView的CGFloat中的高度呢?也许我应该设置根视图的高度,以另一种方式包装我所有的子视图?
编辑
Xcode加载视图会有一些延迟,如果你试图在将视图添加到parent之后立即获取视图大小,你会得到0.0大小。
在检查大小之前,您必须调用yourCustomView.layoutIfNeeded()
。
感谢Chenjtc的正确答案。
发布于 2018-07-01 08:52:22
您可以像这样在代码前添加代码:typeImage.layoutIfNeeded()
:
typeImage.frame.size.height typeImage.bounds.size.height
约束不会立即布局,应使用layoutIfNeeded
对视图进行布局,然后才能获得该框架
发布于 2018-07-01 04:33:01
如果你想在CGFloat中计算多个视图的高度之和,你可以这样做:
let viewHeight = self.view.frame.height //this in CGFloat
let sumHeight = viewHeight + ... other UIViews
print(sumHeight) // 568.0 for iPhone SE
或者,如果您想设置新的UIView高度,可以通过更改以下内容来实现:
typeImage.heightAnchor.constraint(equalToConstant: 28).isActive = true
//
至:
typeImage.heightAnchor.constraint(equalTo: self.view.heightAnchor, multiplier: 1).isActive = true
https://stackoverflow.com/questions/51118259
复制相似问题