2017-12-26 20 views
-1
func roundCorners(_ corners: UIRectCorner, radius: CGFloat) { 
      let path = UIBezierPath(roundedRect: self.bounds, byRoundingCorners: corners, cornerRadii: CGSize(width: radius, height: radius)) 
      let mask = CAShapeLayer() 
      mask.path = path.cgPath 
      self.layer.mask = mask 
     } 

私はUIButtonの特定の側から角の半径を与えるためにこの機能を使用しています。私はUITableViewCellにこの関数を呼び出していますが、私はのような問題を抱えています。デバイスの幅が159.5であれば、デバイスの幅がデバイスの幅に応じて変化するようなボタンに制約を与えました。しかし、それは変化しておらず、ボタンはその幅から切断しています。私はTableviewCellベジェ線のボタンの幅の問題

override func layoutSubviews() { 
     super.layoutSubviews() 
     self.btnWithdraw.roundCorners([.bottomRight], radius: 4.0) 
     self.btnAddFund.roundCorners([.bottomLeft], radius: 4.0) 
} 

でこの関数を呼び出しています。しかし、ここでストーリーボードのViewControllerとボタンに与えられたあたりには制約ごとに幅を取っていないとして、それが元のフレームを取っているような問題がある。

助けていただければ幸いです。
はおそらく、問題はあなたがlayoutSubviewsボタンが新たにレイアウトされているすべての状況下でセルに呼び出されることを想定しているということであるあなたに

+0

iOS 9では、ボタンは、マスクを必要とせずに、特定のコーナーのみを丸める固有の機能を備えています。 – matt

+0

okアプリケーションでios 8がサポートされている場合、どうすればよいですか? @matt –

+0

あなたのコードを 'drawReact'の中に置きます。 – Dhiru

答えて

0

ありがとうございます。それは本当ではないかもしれません。

これらの線に沿って、ボタン自体にあなたの全体のマスキングを実施し、その仮定を避けるために:

class MyButton : UIButton { 
    var whatCorners : UIRectCorner = [.bottomRight] 
    var whatRadius : CGFloat = 4.0 
    func roundCorners(_ corners: UIRectCorner, radius: CGFloat) { 
     let path = UIBezierPath(roundedRect: self.bounds, byRoundingCorners: corners, cornerRadii: CGSize(width: radius, height: radius)) 
     let mask = CAShapeLayer() 
     mask.path = path.cgPath 
     self.layer.mask = mask 
    } 
    override func layoutSubviews() { 
     super.layoutSubviews() 
     self.roundCorners(self.whatCorners, radius: self.whatRadius) 
    } 
} 

そのように、あなたは各ボタンをwhatCornerswhatRadiusのための所望の値を与えることができ、ボタン自体を丸めます。