4
私はUIプラントのサブクラスを追加していますが、これにはCALayers
を追加しています。私はこれをUIView
をストーリーボード経由で私のビューに追加しました。なんらかの理由で、init(およびawakeFromNib)のフレームおよび境界へのアクセスは常に(0、0、1000、1000)です。どうしてこれなの?UIViewのフレームと境界が間違っています
class SliderView: UIView {
let trackLayer = CAShapeLayer()
required init?(coder aDecoder: NSCoder) {
super.init(coder: aDecoder)
// The bounds are wrong
trackLayer.path = UIBezierPath(roundedRect: self.bounds, cornerRadius: 15).cgPath
}
}
を 'initWithFrameをオーバーライドしてみてください:' この回避策は、次のようになりますあなたの場合は
を動作するはずです。 – rmaddy
@rmaddy私もそれをしました。私のコードは実際には、両方のコーダーとinitWithFrameから呼び出される共有initメソッドにあります。しかし、私はストーリーボードに追加しているので、呼び出されるのはこれまでのコーダーだけです。 – Tometoyou
レイアウト制約が適用された後、layoutSubviewsでフレームを取得します。 –