Ios 使用Autolayout&;报告的帧不正确;尺寸等级

Ios 使用Autolayout&;报告的帧不正确;尺寸等级,ios,xcode,uiview,autolayout,size-classes,Ios,Xcode,Uiview,Autolayout,Size Classes,我已经在UIViewController中布置了一个UIView。约束其高度和宽度,并使用约束将其垂直和水平居中,但当我记录其帧时,它报告的位置似乎适合整个大小的类,但不适合我正在查看的屏幕大小 例如,默认大小类UIViewController的宽度为600px,在该大小中,我的UIView距离左边缘为150px。当我在iphone5模拟器中运行时检查距离左边的距离时,它仍然报告150px 所有这一切的奇怪之处在于,UIView本身仍然以预期的方式出现(根据屏幕大小进行了调整)位置。对于后代:我

我已经在UIViewController中布置了一个UIView。约束其高度和宽度,并使用约束将其垂直和水平居中,但当我记录其帧时,它报告的位置似乎适合整个大小的类,但不适合我正在查看的屏幕大小

例如,默认大小类UIViewController的宽度为600px,在该大小中,我的UIView距离左边缘为150px。当我在iphone5模拟器中运行时检查距离左边的距离时,它仍然报告150px


所有这一切的奇怪之处在于,UIView本身仍然以预期的方式出现(根据屏幕大小进行了调整)位置。

对于后代:我遇到的问题--在打印视图框架时获得不正确的值--是由于在
ViewDidLoad
期间访问该框架造成的。此时,在ViewController生命周期中,可能尚未布局所有视图

因此,只有在调用了
viewdilayoutsubviews
之后,才能访问
UIView
属性/插座,这是最安全的


我的意思是,它就在那里,以方法的名义:“你的观点已经摆出来了……现在就用它们做点什么吧。”

问题是,这是错误的答案。你不应该强迫过早的布局。问题仅仅是您太快地记录了帧。视图将被正确地布置;布局将会发生。所以在那之后才记录帧。发生这种情况的信号是
viewDidLayoutSubviews
。是的,你是对的——从那以后,我了解到我需要等待调用viewDidLayoutSubviews,然后才能处理约束或图形。在ViewDidLoad期间访问视图时,视图的设置并不总是正确的(就像我在上面尝试的那样)。正确。所以,如果你用它来代替上面的答案,那就更好了!:)我不在乎马特·纽堡有多少名气,他应该得到更多!他又一次为我节省了工作时间,每个人都应该买他的书!!