-3

Interface Builderを使用せずにプログラムでこれを行いたいです。アプリ ビューの下部から一定の距離にある iOS アプリに UITextField を追加したいと考えています。私は多くの既存の質問と回答を見てきました。Swift には何もなく、このトピックは比較的文書化されていないようです。

4

1 に答える 1

3

そこには多少関連する回答がいくつかありますが、これを機能させるために必要なすべての要素を次に示します。

1)次のような制約を作成する必要がありました

let bottomConstraint : NSLayoutConstraint = NSLayoutConstraint.constraintsWithVisualFormat("V:[inputBox]-50-|", options: NSLayoutFormatOptions(0), metrics: nil, views: ["inputBox": inputBox])[0] as! NSLayoutConstraint

これは、Swift のドメイン固有言語「ビジュアル フォーマット言語」(VFL) を使用しますV:[inputBox]-50-|。ここで、「V」は垂直を意味し、50 はピクセル数、「|」は 親ビューの下部を参照します。

2) ビューに制約を追加する前に、UITextField をビューに追加する必要があったため、'|' 上記の親ビューを見つけることができます。

3) 1 つの NSLayoutConstraint を使用したら、この要素のサイズ変更と配置のすべての面でそれらを使用する必要がありました。したがって、幅と高さを記述するために次の 2 行を追加する必要がありました。

let heightConstraint : NSLayoutConstraint = NSLayoutConstraint.constraintsWithVisualFormat("V:[inputBox(==70)]", options: NSLayoutFormatOptions(0), metrics: nil, views: ["inputBox": inputBox])[0] as! NSLayoutConstraint
let widthConstraint : NSLayoutConstraint = NSLayoutConstraint.constraintsWithVisualFormat("H:[inputBox(==superview)]", options: NSLayoutFormatOptions(0), metrics: nil, views: ["inputBox": inputBox, "superview":self.view])[0] as! NSLayoutConstraint

4) UITextField を VFL と正しくやり取りするには、次の行を追加する必要がありました。

inputBox.setTranslatesAutoresizingMaskIntoConstraints(false)

すべてを一緒に入れて:

let inputBox = UITextField(frame: rect)
inputBox.backgroundColor = UIColor.yellowColor()
inputBox.setTranslatesAutoresizingMaskIntoConstraints(false)
self.view.addSubview(inputBox)

let bottomConstraint : NSLayoutConstraint = NSLayoutConstraint.constraintsWithVisualFormat("V:[inputBox]-50-|", options: NSLayoutFormatOptions(0), metrics: nil, views: ["inputBox": inputBox])[0] as! NSLayoutConstraint
let heightConstraint : NSLayoutConstraint = NSLayoutConstraint.constraintsWithVisualFormat("V:[inputBox(==70)]", options: NSLayoutFormatOptions(0), metrics: nil, views: ["inputBox": inputBox])[0] as! NSLayoutConstraint
let widthConstraint : NSLayoutConstraint = NSLayoutConstraint.constraintsWithVisualFormat("H:[inputBox(==superview)]", options: NSLayoutFormatOptions(0), metrics: nil, views: ["inputBox": inputBox, "superview":self.view])[0] as! NSLayoutConstraint

view.addConstraint(bottomConstraint)
view.addConstraint(heightConstraint)
view.addConstraint(widthConstraint)
于 2015-08-02T21:32:05.477 に答える