2016-10-17 4 views
1

小さな画面用に調整することができ、固定幅のUITextFieldの中心にする方法:テキストフィールドが水平にコンテナへの中心地であるXcodeの自動レイアウト記述に関してはので、私は制約が動作する方法を形成するように見えることはできません

  • テキストフィールドがトップレイアウトガイドから100ポイントオフセットされています
  • テキストフィールドの幅は370ポイントです。
  • コンテナが370ポイント未満の幅に縮小した場合、画面には、テキストフィールドのサイズを変更しない広い行けば、それは比例
  • を調整しますが、370ポイント

のまま私は、多かれ少なかれのための制約を定義することができますそれらのほとんどは、スクリーンがより小さい画面サイズのために幅が縮小する場合、自動的に幅を制限する機能を除きます。

いくつかのポインタは良いでしょう

ありがとう!

答えて

2

あなたは低い優先順位を使用してテキストフィールドに先頭と末尾の制約を追加することができます。そして、単に< = 370であることができる幅制約を追加してください。

+0

質問者が提供した詳細に基づいて、私はこの回答が正しいとは思わない(実際には逆転している)。私の答えは、私の言いたいことを参照してください。 – Dima

+0

さて、私はそれを試しました、そして、私はそれが5SとiPadシミュレータに期待しているように働いているようです!たぶん私は問題を誤解しました! – Rikh

+0

実際、私が言ったことを取り戻します。私はあなたの答えを誤って読んで、最後の部分で '<'を逃しました。あなたも正しいです!これは、同じ結果を達成するもう1つの方法です。 – Dima

1

これはそれを行う必要があります。

let textField = UITextField() 
view.addSubview(textField) 
textField.translatesAutoresizingMaskIntoConstraints = false 

// center horizontally 
textField.centerXAnchor.constraint(equalTo: view.centerXAnchor).isActive = true 
// 100 from top layout guide 
textField.topAnchor.constraint(equalTo: topLayoutGuide.bottomAnchor, constant: 100).isActive = true 

// make sure textfield width never exceeds the superview width 
textField.leftAnchor.constraint(greaterThanOrEqualTo: view.leftAnchor).isActive = true 
textField.rightAnchor.constraint(lessThanOrEqualTo: view.rightAnchor).isActive = true 

// give the textfield its default width, notice the lowered priority which allows this constraint to be broken when needed to satisfy the above constraints 
let widthConstraint = textField.widthAnchor.constraint(equalToConstant: 370) 
widthConstraint.priority = UILayoutPriorityDefaultHigh 
widthConstraint.isActive = true 
+0

幅の制約に優先順位を低くすると、画面の幅が大きいときにブレークすることはありませんか?質問によれば、幅は常に最大で370のままではいけませんか? – Rikh

+0

制約が必要な場合にのみ、制約が破られます。より大きいスクリーンでは、 'leftAnchor'と' rightAnchor'の制約はまだ満たされており、幅の制約を壊さないでしょう。そうではありません。これは完璧に働き、あなたが列挙した条件のすべてを満たしているはずです。ただそれを試してみてください。 – Dima

関連する問題