无法获得 UIVew 尺寸
Posted
技术标签:
【中文标题】无法获得 UIVew 尺寸【英文标题】:Can't get UIVew sizes 【发布时间】:2018-06-30 20:29:43 【问题描述】:我在代码中动态添加 UIView。有很多观点我想补充。举个例子:
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 中获取高度? 也许我应该设置 rootview 的高度以另一种方式包装我的所有子视图?
编辑
Xcode 加载视图会有一些延迟,如果您在将视图添加到父级后立即尝试获取视图大小,您将获得 0.0 大小。
您必须在检查尺寸之前致电yourCustomView.layoutIfNeeded()
。
感谢 Chenjtc 的正确答案。
【问题讨论】:
不相关,但更容易将图像视图创建为let typeImage = UIImageView(image: UIImage(named: "ic_question_bej"))
。
首先想到的是您过早地检查帧大小 - 试试viewDidLayoutSubviews
。也许——也许是viewWillLayoutSubviews
,但当然不是viewDidLoad
! (如果您正在这样做,我建议您检查一下:***.com/questions/5562938/…)还有一件事可能会有所帮助-因为您似乎已经知道每个typeImage
的高度-如果要“跟踪”您有多少创建的。数组有一个基于“1”的count
属性。此外,您可以使用可能有帮助的标签属性。
【参考方案1】:
您可以像这样添加代码:
typeImage.layoutIfNeeded()
代码前:typeImage.frame.size.height
typeImage.bounds.size.height
约束不会立即布局,你应该使用layoutIfNeeded
来布局视图,然后你可以得到帧
【讨论】:
经过6个小时的搜索,您终于回答了我的问题!!!是的,在调用 layoutIfNeeded() 后一切正常!【参考方案2】:如果你想要 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
【讨论】:
我可以获取动态添加的视图的浮动高度吗?例如,我添加了 5 个高度为 25 CGFloat 的按钮。最后我希望 rootView 高度为 button.height * 5。问题是 button.frame.size 总是 0.0 您可以更改(乘数 = 0.75)以获取 %75 的视图 检查我更新的答案..如果你想要 CGFloat 中的高度像这样:'view.frame.height' 请将我的答案标记为正确的,因为它满足您发布的问题。 yes view.frame.height 返回我的全屏高度。当我做 myCustomRightNowAddedView.frame.height 它返回 0.0 。为什么当我将高度设置为 28 时它返回 0 ?以上是关于无法获得 UIVew 尺寸的主要内容,如果未能解决你的问题,请参考以下文章
Android中的相机,如何获得最佳尺寸,预览尺寸,图片尺寸,视图尺寸,图像失真