Ios UICollectionView的帧大小大于UIScreen的大小

Ios UICollectionView的帧大小大于UIScreen的大小,ios,uiview,autolayout,constraints,frame,Ios,Uiview,Autolayout,Constraints,Frame,在myUIViewController的viewDidLoadfunc中调用 print("\(UIScreen.main.bounds.size.width) \(collectionView.frame.width)") 它会打印出来 320.0 375.0 怎么可能呢UICollectionView应该具有相同的宽度,mb更小,但绝对不能更大 故事板中此视图的设置: 每个约束集为 所以我在iPhoneSE模拟器上测试了它,但在情节提要中我有iPhone8 但我相信,当我使用aut

在my
UIViewController的
viewDidLoad
func中调用

print("\(UIScreen.main.bounds.size.width) \(collectionView.frame.width)")
它会打印出来

320.0 375.0

怎么可能呢
UICollectionView
应该具有相同的宽度,mb更小,但绝对不能更大

故事板中此视图的设置:

每个约束集为

所以我在iPhoneSE模拟器上测试了它,但在情节提要中我有iPhone8

但我相信,当我使用autolayout(使视图大小与安全区域大小匹配的约束)时,这一点都不重要

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

更新

似乎
viewDidLoad
返回您在故事板中最后选择的设备的大小(非常难看)

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


在Android中,若某个视图的大小还不可用(视图还并没有膨胀),那个么它只返回零(宽度==0,高度==0),但在iOS中,你们可以在运行时从Xcode情节提要中获得宽度和高度。。。真的吗?

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

Yes。。我已经发现了。最好像在Android中一样返回零,因为许多开发人员认为在
viewDidLoad
中大小是正确的,所以它的设计非常糟糕。在Android中,若某个视图的大小还不可用(视图还并没有膨胀),那个么它只返回零(宽度==0,高度==0),但在iOS中,你们可以在运行时(在viewDidLoad func中)从Xcode情节串连板中的最后一个选定设备获取宽度和高度…我认为如果您不使用Autolayout,只希望视图的大小与在故事板中设置的大小相同,则可能会出现问题。我认为故事板和NIB实际上只是
NSCoding
实现
UIKit
类所使用的存档。因此,当您从故事板实例化对象时,您在它们上设置的任何属性都会反映出来,这是有一定道理的。。如果不使用约束(当viewDidLoad、viewWillApear、ViewDidDisplay和viewDidLayout中相同),则可以设置零,如果约束用于视图,则可以设置这些常量,而不是零