私は新しいXcodeをダウンロードし、Interface Builderで次のようなことを言う警告でたくさんの問題を抱えています。
固定幅の制約によりクリッピングが発生する
それはこのように見えます:
私はいくつかの言語のローカライズをしています、そして私は別の言語でラベルのサイズが変わるかもしれないという警告を理解します、しかし私のアプリはこの問題を抱えていません。私は昨日Xcode 8で走らせてテストした、それは大丈夫だった。無意味な新しい制約を追加するのに何時間も費やしたくはありません。
提案された解決策はありますか?
アプリに複数の言語がない場合でも、でも同じ警告が表示されましたで、実際に何が起こっているのかがわかりました。 。 。
ここではいくつかの異なることが行われています。固定幅の警告を消音することができましたオブジェクト間隔の幅を変更することで自分のアプリで固定幅から以上またはまたはより小さいか等しい。
これは、インターフェイスビルダーでオブジェクトを選択し、サイズインスペクターに移動してそこで変更することで実行できます。
または、ドキュメントのアウトラインから制約を選択し、サイズインスペクターに移動して、そこで変更します。
スクリーンショットの上部にある警告に関する限り:
中央の制約を伴う先行および後続の制約がクリッピングを引き起こす可能性がある問題を修正しました
これは、まったく同じ警告が表示されていた自分のアプリのスクリーンショットです。
@記号が付いたラベルをボタンの先頭と末尾に設定しましたが、中心を評価ラベルに合わせました。中央の配置制約を削除すると、警告は消えましたが、不適切にレイアウトされたオブジェクトのセットが残っていました。
そのとき、私はスタックビューを受け入れるに辞任しました。使用するのは面倒ですが、すべての制約と設定を正しく取得すると、警告なしで美しくレイアウトされます。
編集
Reposeはコメントに書き込みます。2つの要素が重ならないようにするため、必要に応じて> = 0を追加するだけで十分な場合があります。
ローカライズされたラベルやボタンの場合、この警告は意味があり、ラベルが重ならないように必要な制約を設ける必要があります。それらが重複していなければ、将来はそうなるかもしれないので、制約を与えても問題ありません。
Xcodeでは、これらの制約を自動的に追加できます。
ストーリーボードのドキュメントのアウトラインで黄色い矢印をクリックし、テキストが画面のどこにあるか(左または右)に応じて "fixed lead"または "fixed trailing"を選択します。これでほとんどの問題が解決します。
テキストなしの ボタンでこの問題がある場合は (画像のみ)、まだボタンに設定されている可能性がある「デフォルトのタイトル」を削除してみてください。
私はこの質問はすでに答えられていることを知っていますが、私の場合このエラーを修正するために行ったのは "Aspect ratio"プロパティを追加して幅や高さの制約を取り除くことでした。同じ出力と私の見解を異なる機器に適応させます。
私はXcode 9に移行したときに同じ問題を抱えていて、ある種のレイアウトに役立つアプローチを見つけました。私の場合は、2つの列(UILabels)が固定幅で、もう1つが可変幅であるテーブルヘッダーが必要でした。列幅をどのように指定したかに関係なく(等しいなどの代わりにより大きいか等しい制約を使用するなど)、クリッピングの可能性についての警告を受け続けました。私の場合は、必要に応じて可変幅列(UILabel)を切り取りたいと思いました。私はただ警告を無視したかもしれませんが、それをするのが好きではありません。
ここでうまくいったアプローチは、適切なサイズの制約でUIViewを作成し、UILiewをUIViewのサブビューとして埋め込むことでした。その後、必要に応じて切り捨てが行われ、警告が表示されません。これは、UIView/embedded UILabelがStackViewにあるかどうかにかかわらず動作します。
これは本質的にHaroldo Gondimと同じアプローチですが、ここではStackViewがあってもなくても機能することがわかります。
次の図は、StackViewを使用した場合と使用しない場合の方法を示しています。 "SpacerName"はラベルを含む可変幅のUIViewで、 "SpacerPD"は80の固定幅のものです。[色は重要ではありません。ビューがどこにあるかを示すためにそこにちょうどあります。
ボタンに固定幅の制限が必要な場合は、幅制限の優先順位を700
に設定してください。