2017-05-14 1 views
0

ラウンドこのUIViewのを取得することはできません。私はこれは、以下のコードの最終結果である

enter image description here

これは私のコードです:

view.layer.cornerRadius = 0.5 * view.bounds.size.width 
view.layer.masksToBounds = true 
view.clipsToBounds = true 

ビューが赤のUIViewです。このコードはviewWillLayoutSubviewsとviewDidLayoutSubviewsに配置されています(一緒にではありませんが、私は両方をテストしました)。

さらに、masksToBoundsまたはclipsToBoundsを使用することについてはわかりません。私は何を使うべきか、上記のいずれかをいつ使うべきかはわかりません。私もそれを離れてテストしました。

緑色のUIViewには、アクティブな角と丸い角もありますが、両方を削除すると、同じ効果が得られます。誰かが助けてくれることを願っています。 これは、別のUIViewの中にUIViewを配置した場合にのみ発生します。 UIViewに親がない場合、それは機能します(私はUIViewを丸めます)。

編集:GitHubのリンク:https://github.com/Jasperav/tests

+0

はview.bounds.size.width = view.bounds.size.heightということですか? – Larme

+0

ビューは1:1のアスペクト比 –

+0

としてビューの高さと幅が偶数になるようにします(例:ビューh = 10、w = 10、コーナー半径= 5) –

答えて

1

問題は、自動レイアウトエンジンは、実際にすべてのレイアウトの計算を完了したときです。

コードをviewDidAppearに移動すると、角が正しく丸く表示されます。

これは、カスタムビューを使用する非常に一般的なケースです。実際、「IBDesignable」クラスとして簡単に使用できるので、Interface Builderでレンダリングされていることがわかります。

このコードの「RoundedView.swift」という名前の新しいファイルを作成します。そして、あなたがラウンドになりたいビューにそのクラスを割り当てる

import UIKit 

@IBDesignable 
class RoundView: UIView { 
    override func layoutSubviews() { 
     super.layoutSubviews() 
     self.layer.cornerRadius = 0.5 * self.bounds.size.height 
    } 
} 

を。 Xcodeはあなたの新しいクラスを構築し、それはそうのようにInterface Builderに表示されます:

enter image description here

+0

ありがとう!私は実際に私のUIView(春はポッドファイルです)のクラス "SpringView"を使用したいので、私はこれを別に使用することはできません(2つのクラスを使用することはできません)。通常のUIViewの拡張機能を作成することは可能ですか? –

+0

心配しないで、うまくいきました:)ありがとう! –

関連する問題