Ios UIView使用AutoLayout返回错误的高度值

Ios UIView使用AutoLayout返回错误的高度值,ios,uiview,autolayout,Ios,Uiview,Autolayout,我有一个自定义UIView,它在cashaplayer和UIBezierPath的帮助下绘制一个“环”进度。在视图中绘制贝塞尔路径时,我希望将其绘制到视图的中心。“我的视图”的superview和纵横比为1:1(因此它是一个完美的正方形),具有自动布局控件的前导和尾随 我的第一个想法是,我将得到视图的大小(高度和宽度),除以2,生成一个CGPoint,并将其与bezier路径一起使用。按照我的逻辑,它会返回视图的中间位置,不是吗 显然不是。在日志中,视图的高度和宽度返回497,视图调试器告诉我它

我有一个自定义UIView,它在
cashaplayer
UIBezierPath
的帮助下绘制一个“环”进度。在视图中绘制贝塞尔路径时,我希望将其绘制到视图的中心。“我的视图”的superview和纵横比为1:1(因此它是一个完美的正方形),具有自动布局控件的前导和尾随

我的第一个想法是,我将得到视图的大小(高度和宽度),除以2,生成一个CGPoint,并将其与bezier路径一起使用。按照我的逻辑,它会返回视图的中间位置,不是吗

显然不是。在日志中,视图的高度和宽度返回497,视图调试器告诉我它是303,视图如下所示:


有人知道为什么会发生这种情况吗?

发布您的自动布局代码看起来与大小类相关。你从哪里记录高度。需要在运行
视图后显示。如果更改约束,还需要请求布局。你能显示你的代码吗?我是通过界面生成器设置的。前导间距:35,尾随间距:35,纵横比view.height=view.width/1:1任何尺寸都是600x600,因此去掉70页边距,并猜测相对于页边距(2x16)您受到了约束,这就得到了498的视图宽度。在iPhone6上,宽度是414磅:所以减去102就得到了312磅。这些数字与您在问题中提出的数字接近,这意味着您必须在视图布局发生之前(相对于设备屏幕大小)记录,但在布局发生之后,必须在调试器中记录。黑色视图看起来不错。从圆圈中,我猜您在布局之前设置了圆心和半径,因此在绘制设备为600x600时,您将在何处绘制。Rory意味着您正在检查视图的高度和宽度,然后才调整视图的显示大小。你要在viewDidLoad中检查它吗?