0

プライマリビューコントローラ上のポップオーバー内に画像、ラベル、テキスト、ボタンで比例したスタックビューを実装しました。私がポップオーバーにセグメンテーションするとき、私はProfileImageをサークルとして現れるように高さの1/2になるように呼び出すイメージのコーナー半径を定義するために、ビューがオーバーライドされたように見えます。スタックビュー内のサブビューの属性を、デバイスを回転させた後に再計算するときに比例して使用する方法

私はデバイスを回転させると、スタックが再計算し、profileImageのサイズを変更します。私はコーナーの半径を調整するために以下のコードを使用して、ビューがトランジションするときに円になるようにしようとしました。私はこのコードを補完ブロックとalongsideTransitionブロックの両方で試しました。

デバイスを回転させると、コーナー半径は、NEW方向ではなく、OLD方向のイメージのサイズによって設定されます。まるで新しい方向への移行が起こったように感じ、スタックがそれ自身を再計算したように感じます。これが起こる前にコーナーの半径が更新されているようです。私は、デバイスが回転し、スタックがその新しい方向に基づいてイメージサイズを再計算した後に新しいビューの高さになるイメージのheightプロパティを呼び出す方法を理解するのを助けたいと思います。

ご指摘いただきありがとうございます。問題のコードは以下を参照してください:

override func viewWillTransition(to size: CGSize, with coordinator: UIViewControllerTransitionCoordinator) { 
    coordinator.animate(alongsideTransition: { context in 
     context.viewController(forKey: UITransitionContextViewControllerKey.from) 
    }, completion: {(context) -> Void in 
     self.view.layoutSubviews() 
     self.ProfileImage.layer.cornerRadius = self.ProfileImage.bounds.size.height/2 
     print(self.ProfileImage.frame.size.height) 
    }) 
} 

答えて

0

を近いですが、完璧ではない答えがviewWillLayoutSubviewsで角の半径を設定することです()の代わりに、viewWillTransitionに()UIStackビューがサブビューをレイアウトするので、その間に回転しないでください。

override func viewWillLayoutSubviews() { 
    self.ProfileImage.layer.cornerRadius = self.ProfileImage.frame.size.height/2 
} 

は正しい方向に私を指しているため、この記事への回答をお願い致します: View frame changes between viewWillAppear: and viewDidAppear:


を私の問題は今、何とかUIImageビューのサイズが数ピクセル変更されたことですviewDidLayoutSubviews呼び出し後。 DidLayoutSubviewsの後にスタックビューまたは自動レイアウトが再計算されたときに呼び出される別の関数がありますか?

アプリはうまく見えますが、私は理解していない他の動作が起こっています。

関連する問題