投稿

2月, 2019の投稿を表示しています

UIViewを角丸にしようとしてもdraw(_ rect: CGRect)をオーバーライドしたら四角になる

Xcode 10.1 Swift 4.2 UIViewの角丸は class MyView: UIView { init() { super.init(frame: .zero) self.backgroundColor = UIColor.white self.layer.cornerRadius = 10.0 } required init?(coder aDecoder: NSCoder) { fatalError("init(coder:) has not been implemented") } } とすると出来る。 しかし次のように override func draw(_ rect: CGRect) を書いてしまうとダメになる。 class MyView: UIView { init() { super.init(frame: .zero) self.backgroundColor = UIColor.white self.layer.cornerRadius = 10.0 } required init?(coder aDecoder: NSCoder) { fatalError("init(coder:) has not been implemented") } override func draw(_ rect: CGRect) { super.draw(rect) } } この場合、self.clipsToBounds = trueをinit()などに書いてやると丸く収まる。 しかし、viewにシャドウを付ける場合はself.clipsToBounds = trueによってシャドウが消える。角丸にしてシャドウをつけるのはよくあるので困る。