2017-11-13 11 views
1

自動レイアウトを使用しているときに円形のビューを作成したいとします。このため、特定の半径値を私のビューに設定することはできません。自動レイアウトによるビューの丸み?

私は次のコードでこれを解決したと思っていましたが、何らかの理由でビューの最初の読み込みで実行されず、画面のビューをプッシュして元に戻すまでキーボードを下げてください)。なぜ、どのようにして私が修正プログラムに近づけることができるのか?

override func viewWillLayoutSubviews() { 
    self.myProfileView.userImage.layer.cornerRadius = self.myProfileView.userImage.frame.size.width * 0.5 
    self.myProfileView.userImage.layer.borderWidth = 2 
    self.myProfileView.userImage.layer.borderColor = UIColor().appThemeColour().cgColor 
} 

制約:

userImage.snp.makeConstraints { (make) -> Void in 
      make.centerX.equalTo(self) 
      make.centerY.equalTo(self).multipliedBy(0.25) 
      userImage.heightAnchor.constraint(equalTo: userImage.widthAnchor).isActive = true 
      userImage.widthAnchor.constraint(equalTo: self.widthAnchor, multiplier: 0.40).isActive = true 
     } 

ときに最初にロード画面上のビューをプッシュする前に:

view is still square-shaped

私が開いて、オフビューを押してキーボードを閉じた後スクリーンに戻る:

view is now rounded

答えて

3

あなたはレイアウトが正しいのフレームを持つ後に実行され、代わりにviewDidLayoutSubviewsに丸めコードを実行する必要があります。

myProfileViewの場合は、layoutIfNeeded()を実行してサイズにアクセスしてください。

override func viewDidLayoutSubviews() { 
    myProfileView.layoutIfNeeded() 

    myProfileView.userImage.layer.cornerRadius = myProfileView.userImage.frame.size.width * 0.5 
    myProfileView.userImage.layer.borderWidth = 2 
    myProfileView.userImage.layer.borderColor = UIColor().appThemeColour().cgColor 
} 
+0

私はあなたのロジックを参照してくださいが、残念ながら、これはどちらかの効果がありません、問題は、このコードの前に ')(' myProfileView.layoutIfNeeded実行してみ – jackdm

+0

上記のように持続します。 – the4kman

+0

あなたがあなたの答えを更新することができればそれを解決してくれてありがとうございましたかわいいですか? – jackdm

関連する問題