无法获得 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中的相机,如何获得最佳尺寸,预览尺寸,图片尺寸,视图尺寸,图像失真

Android 获得view的宽和高

ios开发获得屏幕尺寸的一些小问题

窗体在 Windows 8 上显示错误的尺寸 - 如何获得真实尺寸?

如何获得活动屏幕尺寸?