UICollectionView的帧大小大于UIScreen的大小

时间:2019-04-13 16:54:11

标签: ios uiview autolayout constraints frame

在我的viewDidLoad的{​​{1}}函数中,

UIViewController

它会打印

  

320.0 375.0

怎么可能? print("\(UIScreen.main.bounds.size.width) \(collectionView.frame.width)") 应该具有相同的宽度,mb较小,但绝对不应该大

情节提要中此视图的设置:

enter image description here

每个约束设置为

enter image description here

所以我在iPhone SE Simulator上进行了测试,但在Storyboard中我有iPhone 8。

enter image description here

enter image description here

但是我相信当我使用自动布局时(应该使视图的大小与安全区域的大小相匹配)完全无关紧要

iPhone 8的宽度为375点,iPhone SE为320:

enter image description here

更新

似乎UICollectionView在情节提要中返回了您最后选择的设备的大小(非常丑陋)

因此,要获取有关视图的正确数据,我必须获得viewDidLoad

中的大小

在Android中,如果某个视图的大小尚不可用(视图尚未膨胀),则它仅返回零(宽度== 0,高度== 0),但是在iOS中,您可以从Xcode获取宽度和高度运行时的情节提要...真的吗?

1 个答案:

答案 0 :(得分:0)

从情节提要中实例化视图控制器时,其视图的大小将是情节提要中当前设置的大小。在将其添加到视图层次结构后,它将具有与屏幕相同的大小。在添加视图之前会调用viewDidLoad,因此它的大小仍将与情节提要上的大小相同。您可以获取显示在内部方法viewWillApearviewDidAppearviewDidLayout中的大小。请记住,这些方法可能会多次调用。