Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/118.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios 视图控制器原点每次更改';呈现_Ios_Swift_Uiview - Fatal编程技术网

Ios 视图控制器原点每次更改';呈现

Ios 视图控制器原点每次更改';呈现,ios,swift,uiview,Ios,Swift,Uiview,我的视图控制器应该是这样的: 有时就是这样: 我想在圆中显示视图控制器,但是,几乎每次显示圆中的视图控制器(ResultViewController)时,它的位置都不同,尽管它的属性根本没有改变。这是我的密码: func openCircle(withCenter center: CGPoint, dataSource: ([Items], Int, String)){ self.addCircle(withCenter: center, dataSource: dataSource

我的视图控制器应该是这样的:

有时就是这样:

我想在圆中显示视图控制器,但是,几乎每次显示圆中的视图控制器(
ResultViewController
)时,它的位置都不同,尽管它的属性根本没有改变。这是我的密码:

func openCircle(withCenter center: CGPoint, dataSource: ([Items], Int, String)){
    self.addCircle(withCenter: center, dataSource: dataSource)
}

func addCircle(withCenter circleCenter: CGPoint, dataSource: ([Items], Int, String)) {

    let longerSide = fmax(view.frame.size.height, view.frame.size.width)
    let shorterSide = fmin(view.frame.size.height, view.frame.size.width)

    let circleRadius = longerSide / 2
    var resultViewOrigin = CGPoint()
    var resultViewSize = CGSize()

    if UIDevice.current.userInterfaceIdiom == .pad {

        let rectWidth = shorterSide / 2
        let rectHeight = sqrt(abs(circleRadius * circleRadius - rectWidth * rectWidth)) + view.frame.size.height - circleCenter.y
        resultViewSize = CGSize(width: rectWidth, height: rectHeight)
        resultViewOrigin = CGPoint(x: (view.frame.size.width - rectWidth) / 2, y: view.frame.size.height - rectHeight)

    } else {
        resultViewOrigin = CGPoint(x: 0.0, y: 0.0)
        resultViewSize = CGSize(width: view.frame.size.width, height: view.frame.size.height)
    }

    let resultViewController = UIStoryboard(name: "Main", bundle: Bundle.main).instantiateViewController(withIdentifier: "ResultVC") as! ResultViewController
    resultViewController.transitioningDelegate = self
    resultViewController.modalPresentationStyle = .custom
    resultViewController.dataSource = dataSource
    resultViewController.view.frame = CGRect(origin: resultViewOrigin, size: resultViewSize)

    transition.circle = UIView()
    transition.startingPoint = circleCenter
    transition.radius = circleRadius
    transition.circle.frame = circleFrame(radius: transition.radius, center: transition.startingPoint)

    present(resultViewController, animated: true)
}

它在iPhone上运行良好,而不是在iPad上,有什么问题吗

您可以使用容器视图而不是显示视图控制器。您可以通过编程方式或在interface builder中创建它们(请参见)

我发现了这个问题,实际上是常规尺寸类上缺少约束导致了这个问题,我通过在过去放错位置的零件上添加“底部间距”布局指南来修复它


谢谢大家的想法

您是否能够包含所需显示的屏幕截图?(来自iPhone)@Danoram很抱歉反应太晚,请看编辑你能拍更好的照片吗?我不明白出了什么问题。并可能突出显示它们?@亲爱的,你注意到在第二个屏幕截图中,部分文本不在圆圈内吗?圆圈中有一个视图控制器,它应该在圆圈的范围内。它可以解决您的问题。在设置resultViewController的框架后,您可以将其视图的中心设置为
resultViewController.view.center=self.view.center
我将动画附加到显示的视图控制器上,容器视图不是方法的最佳解决方案容器视图是常用视图。可以使用视图动画显示或隐藏它们。为什么它不适合您?不仅仅是动画,还有大量数据和连接,从视图控制器到容器视图的迁移太高了。容器视图包含带有视图控制器的视图。