5 votes

L'origine du contrôleur de vue change à chaque fois qu'il est présenté

Voici ce que devrait être mon contrôleur de vue :

enter image description here

Voilà ce qu'il en est parfois :

enter image description here

Je veux afficher un contrôleur de vue dans le cercle, cependant, presque à chaque fois que le contrôleur de vue dans le cercle ( ResultViewController ) est présenté, sa place est différente, bien que ses propriétés ne changent pas du tout. Voici mon code :

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)
}

Cela fonctionne bien sur l'iPhone, pas sur l'iPad, quel est le problème ?

3voto

Bright Future Points 2507

J'ai trouvé le problème, c'est en fait une contrainte manquante sur la classe de taille Regular-Regular qui a causé ce problème, je l'ai corrigé en ajoutant un espacement au guide de mise en page du bas pour la partie qui avait l'habitude d'être mal placée.

Merci à tous pour vos idées.

1voto

clemens Points 10221

Vous pouvez utiliser un vue du conteneur au lieu de présenter le contrôleur de vue. Vous pouvez les créer par programme ou dans le constructeur d'interface (voir Documents d'Apple ).

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X