2017-08-09 31 views
0

私は何かのカスタムコントロールを作成するための練習に取り組んでいます。私の考えは、画面の中央にUIView、その下にUILabelを持つことです。ビューをタップすると、ランダムな色が表示され、ラベルはその16進値に変わります。このカスタムコントロールを作成しようとすると、プログラムでUIViewを中央に配置しようとすると問題が発生します。私はcolorBox.center〜UIViewをカスタムコントロールに配置するにはどうすればよいですか?

`で問題に
import UIKit 

@IBDesignable 
class Color: UIView { 
    private lazy var label : UILabel = { 
     let label = UILabel() 
     label.backgroundColor = UIColor.clear 
     label.translatesAutoresizingMaskIntoConstraints = false 
     label.heightAnchor.constraint(equalToConstant: 25.0).isActive = true 
     label.widthAnchor.constraint(equalToConstant: 100.0).isActive = true 
     label.font = .systemFont(ofSize: 15.0, weight: UIFontWeightRegular) 
     return label 
    }() 

    private lazy var colorGen : UIView = { 
     let colorBox = UIView() 
     colorBox.backgroundColor = UIColor.black 
     colorBox.heightAnchor.constraint(equalToConstant: 100.0).isActive = true 
     colorBox.widthAnchor.constraint(equalToConstant: 100.0).isActive = true 
     colorBox.centerXAnchor.constraint(equalTo: colorBox.frame.size.width /2) 

    }() 

    override init (frame: CGRect) { 
     super.init(frame:frame) 
     setUpLabel() 
     setUpView() 
    } 

    required init?(coder: NSCoder) { 
     super.init(coder: coder) 
     setUpLabel() 
     setUpView() 
    } 

を取得し、私はself.viewの使用についての答えを試みたが、それは私のために動作しませんので、私は少し迷ってしまいました。

+0

あなたは近いですが、あなたはあなたがしてスーパーにそれらが相対的に制約することができるようにラベルやビューを追加する必要があります制約コードを 'prepareForInterfaceBuilder()'に入れますか? – dfd

+0

いいえ、私はそれを調べます。 IBのために私がやっていることはあまりにも複雑ですか? – LampPost

答えて

1

私は個人的にIBを使用していないが、あなたが動いて試してみました...

@IBDesignable 
class ColorView: UIView { 

    private lazy var colorLabel : UILabel = { 
     let label = UILabel() 
     label.translatesAutoresizingMaskIntoConstraints = false 
     label.backgroundColor = UIColor.clear 
     label.heightAnchor.constraint(equalToConstant: 25.0).isActive = true 
     label.widthAnchor.constraint(equalToConstant: 100.0).isActive = true 
     label.font = .systemFont(ofSize: 15.0, weight: UIFontWeightRegular) 
     return label 
    }() 

    private lazy var colorGen : UIView = { 
     let colorBox = UIView() 
     colorBox.translatesAutoresizingMaskIntoConstraints = false 
     colorBox.backgroundColor = UIColor.cyan 
     colorBox.heightAnchor.constraint(equalToConstant: 100.0).isActive = true 
     colorBox.widthAnchor.constraint(equalToConstant: 100.0).isActive = true 
     return colorBox 
    }() 

    override init (frame: CGRect) { 
     super.init(frame:frame) 
     commonSetup() 
    } 

    required init?(coder: NSCoder) { 
     super.init(coder: coder) 
     commonSetup() 
    } 

    func commonSetup() -> Void { 
     self.addSubview(colorGen) 
     self.addSubview(colorLabel) 

     colorGen.leftAnchor.constraint(equalTo: self.leftAnchor, constant: 0.0).isActive = true 
     colorGen.rightAnchor.constraint(equalTo: self.rightAnchor, constant: 0.0).isActive = true 
     colorGen.topAnchor.constraint(equalTo: self.topAnchor, constant: 0.0).isActive = true 

     colorLabel.leftAnchor.constraint(equalTo: self.leftAnchor, constant: 0.0).isActive = true 
     colorLabel.rightAnchor.constraint(equalTo: self.rightAnchor, constant: 0.0).isActive = true 
     colorLabel.bottomAnchor.constraint(equalTo: self.bottomAnchor, constant: 0.0).isActive = true 

     colorLabel.topAnchor.constraint(equalTo: colorGen.bottomAnchor, constant: 0.0).isActive = true 

     colorLabel.text = "the label" 
    } 

} 
+0

ありがとう、私はこれをやっているやり方が間違ったやり方であることを理解しています。 – LampPost

関連する問題