上下するUIViewの上にUIButtonを配置して、カスタムクラス内のlayoutSubviews()で下線を引いています。
UIViewを上下させるとself.view.layoutIfNeeded()から?カスタムクラス内のlayoutSubviews()が呼ばれて?
UIButtonをタップすると、カスタムクラス内のlayoutSubviews()が呼ばれて?
UIButtonの背景となるUIViewが複数生成されてしまうようです?
これを回避したいのですが、どのようにすればよいでしょうか?
下線を違う部分で描写すればよいと思うのですが、どこで描写すればよいでしょうか?
それとも、見た目上は問題ないので、このままでもよいのでしょうか?
githubテストファイル → https://github.com/tyobigoro/testMovableButton
swift
1import UIKit 2class ViewController: UIViewController { 3 4 // 制約のOutlet接続 5 @IBOutlet weak var upperConstraint: NSLayoutConstraint! 6 @IBOutlet weak var lowerConstraint: NSLayoutConstraint! 7 8〜省略〜 9 10 // Viewの上げ下げ 11 @IBAction func MoveView(_ sender: UIButton) { 12 13 // 制約の切り替え 14 if upperConstraint.isActive == true { 15 NSLayoutConstraint.deactivate([upperConstraint]) 16 NSLayoutConstraint.activate([lowerConstraint]) 17 } else { 18 NSLayoutConstraint.deactivate([lowerConstraint]) 19 NSLayoutConstraint.activate([upperConstraint]) 20 21 } 22 //スクロールのアニメーション効果 23 UIView.animate(withDuration: 0.5, animations: { self.view.layoutIfNeeded() }, completion: nil) 24 } 25 } 26
swift
1import UIKit 2// MARK: カスタムビューの定義 3@IBDesignable 4class CustomButton: UIButton { 5 6〜省略〜 7 8 override func layoutSubviews() { 9 super.layoutSubviews() 10 11 12 let line = UIView( 13 frame: CGRect 14 (x:5 , y: frame.size.height - 5, width: frame.size.width - 10, height: 2)) 15 line.backgroundColor = UIColor.red 16 // ここで下線を引いているのがよくないのでしょうか? 17 self.addSubview(line) 18 }
回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
退会済みユーザー
2018/03/28 00:39