繁体   English   中英

如何获得已被约束拉伸的视图的高度? -iOS

[英]How to get the height of a view that has been stretched by constraints? - iOS

我有以下视图层次结构:

  • 根视图
    • 儿童观

根的高度和宽度已受约束条件(上,下,前导,尾随)拉伸,并且应约为500。子项的高度也受约束条件设置,因此其高度也应等于500。

一切在视觉上看起来都很好,但是当我访问孩子的frame.bounds.height时,它将返回整个屏幕的高度,而不是估计的500。更糟糕的是,当我在Rootview上访问frame.bounds.height时,返回0,因为我已将框架设置为.Zero。

现在我的问题是,如何从已被约束拉伸的视图中获取宽度和高度? 在我看来.frame.bounds不适用于自动布局。

展示柜:

    print("collectionView height: ", String(describing: collectionView.frame.height) )

简历高度:0.0

CollectionView是棕色视图:

在此处输入图片说明

我的主要目标是制作一个与棕色collectionView一样大的单元格。 但这失败了,因为我无法获得动态大小的collectionView的宽度。

根据评论,看来我帮助解决了这个问题。 它取决于视图控制器的“生命周期”,以及“什么时候知道”帧”。

缩写的生命周期是:

  • viewDidLoad
  • viewWillAppear
  • viewWillLayoutSubviews
  • viewDidLayoutSubviews
  • viewDidAppear

一个简单的检查-使用控制台和/或断点-将显示以下内容:

  • 虽然viewDidLoad知道界限,但它不知道框架。
  • viewWillLayoutSubviews 可以知道帧,但它被称为(通常情况下)不止一次。 - viewDidLayoutSubviews`而*可能多次调用,是一帧大小的“保证书”的最早时刻。

我被要求将其发布为答案,但是我正在这里寻找更好的资源。 我发现了两个- 两者都是同一个问题的一部分。

UIViewController生命周期

前三个答案都很好(我更希望第三个答案能最好地回答这个问题。)

对于此问题,必须知道何时可以确定帧大小。 viewWillLayoutSubviews可能可行,但如果可行, viewDidLayoutSubviews是最佳选择。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM