Ios UIScreen.main、super.view和其他视图的中心不在屏幕中间

Ios UIScreen.main、super.view和其他视图的中心不在屏幕中间,ios,swift,uikit,arkit,cgrect,Ios,Swift,Uikit,Arkit,Cgrect,我的目标是在iPhone屏幕的中央放置一个按钮,使按钮与屏幕边缘的距离相等。我尝试通过两种方式添加此按钮,即为框架指定一个原点,原点位于父视图super.view或UIScreen.main的中心。我还尝试使用约束将按钮的中心重新设置为父视图的中心。在这两种情况下,按钮似乎靠近屏幕中心,但不是直接居中。需要注意的是,我使用的是ARSCNView,其次我没有使用.xib或storyboard来配置UI。您可以查看摄像头按钮的屏幕快照(红色): 您可以在视图控制器中查看我当前的代码:(我已经注释了

我的目标是在iPhone屏幕的中央放置一个按钮,使按钮与屏幕边缘的距离相等。我尝试通过两种方式添加此按钮,即为框架指定一个原点,原点位于父视图super.view或UIScreen.main的中心。我还尝试使用约束将按钮的中心重新设置为父视图的中心。在这两种情况下,按钮似乎靠近屏幕中心,但不是直接居中。需要注意的是,我使用的是ARSCNView,其次我没有使用.xib或storyboard来配置UI。您可以查看摄像头按钮的屏幕快照(红色):

您可以在视图控制器中查看我当前的代码:(我已经注释了定义屏幕中心的各种方法)


使用auto layout,当以编程方式设置约束时,需要将
translateAuthoreSizingMaskinToConstarints
设置为
false

cameraButton?.translateAutoresizingMaskIntoconstarints = false
let verticalCenterCamera = NSLayoutConstraint(item: cameraButton, attribute: .centerY, relatedBy: .equal, toItem: self.view, attribute: .centerY, multiplier: 1.0, constant: 0.0)
let horizontalCenterCamera = NSLayoutConstraint(item: cameraButton, attribute: .centerX, relatedBy: .equal, toItem: self.view, attribute: .centerX, multiplier: 1.0, constant: 0.0)
NSLayoutConstraint.activate([verticalCenterCamera, horizontalCenterCamera])
self.view.layoutIfNeeded()
//

带框架布局

self.view.addSubview(cameraButton!)
self.cameraButton?.center = self.sceneView.center

您已将摄像头按钮的原点设置为屏幕中心,但原点位于按钮的左上角。约束不起作用,因为您需要执行以下操作:
cameraButton?.translatesAutoResizezingMacSkinToConstraints=false
。如果不立即对按钮框架执行任何操作,则不需要使用“camerabutton?”.layoutIfNeeded()。@SupporterOfTruth是正确的。如果不使用约束,也可以按如下方式设置摄影机按钮的中心:
self.cameraButton.center=self.sceneView.center
我已成功尝试了上述解决方案,除一个外,所有解决方案都完全符合要求。无论出于何种原因,在我设置cameraButton?后。translatesAutoresizingMaskIntoConstraints=false按钮的大小会缩小。至于移动CGRect帧的原点,使其中心位于屏幕的中心,我最终为x和y坐标定义了两个变量,距离中心x和y坐标相差50点。让xOrigin=sceneView.center.x-50让yOrigin=sceneView.center.y-50让cameraCenter=CGPoint(x:xOrigin,y:yOrigin)谢谢大家。
self.view.addSubview(cameraButton!)
self.cameraButton?.center = self.sceneView.center