2016-04-13 18 views
0

UIButtonの高さと幅が等しいと仮定して、UIButtonに円の境界線を与えるには、次のサブクラスのUIButtonがあります。しかし、自動レイアウトがその仕事をするとき、私は正しい半径を取得しません。自動レイアウトで正しく動作するようにこのクラスを変更するにはどうすればよいですか?UIButtonサイズを使ってAutolayoutで角の半径を設定するサブクラス

import UIKit 

class CircularButton: UIButton { 

    required init?(coder aDecoder: NSCoder) 
    { 
     super.init(coder: aDecoder) 
     self.layer.cornerRadius = self.bounds.size.height/2 
     self.layer.borderWidth = 1 
    } 
} 
+0

あなたはスクリーンショットを置くことができますか? –

+0

問題は、initが実行されているときにCircularButtonのビューに最終的なself.bounds.sizeが正しく設定されていないことです。なぜならAutolayoutは後で(initの後に)何をするのだろうか。したがって、コーナー半径は必ずしもself.bounds.size.height/2の最終値の半分ではない値になります。これは明らかで、スクリーンショットでは秘密が明らかにならないと思います。 – Dogahe

答えて

0

常にコール:

setNeedsLayout() 
layoutIfNeeded() 

自動レイアウトを使用している場合、ビューのフレームや境界をアクセスする前に。それ以外の場合は、AutoLayoutで設定される前にビューのサイズにアクセスします。これらの2つのメソッドを呼び出すと、AutoLayoutパスが強制的に実行され、ビューの正しいサイズにアクセスできます。

また、initではなく、awakeFromNibにコーナーの半径を設定する必要があります。

+0

あなたの提案はうまくいかなかったが、これはうまくいきました:override func layoutSubviews() { self.layer.cornerRadius = self.bounds.size.height/2 } – Dogahe

関連する問題