web-dev-qa-db-ja.com

Xcode 9 - 「固定幅の制約によりクリッピングが発生する」およびその他のローカライズ警告

私は新しいXcodeをダウンロードし、Interface Builderで次のようなことを言う警告でたくさんの問題を抱えています。

固定幅の制約によりクリッピングが発生する

それはこのように見えます:

enter image description here

私はいくつかの言語のローカライズをしています、そして私は別の言語でラベルのサイズが変わるかもしれないという警告を理解します、しかし私のアプリはこの問題を抱えていません。私は昨日Xcode 8で走らせてテストした、それは大丈夫だった。無意味な新しい制約を追加するのに何時間も費やしたくはありません。

提案された解決策はありますか?

122
Dave G

アプリに複数の言語がない場合でも、でも同じ警告が表示されましたで、実際に何が起こっているのかがわかりました。 。 。

ここではいくつかの異なることが行われています。固定幅の警告を消音することができましたオブジェクト間隔の幅を変更することで自分のアプリで固定幅から以上またはまたはより小さいか等しい

これは、インターフェイスビルダーでオブジェクトを選択し、サイズインスペクターに移動してそこで変更することで実行できます。

enter image description here


または、ドキュメントのアウトラインから制約を選択し、サイズインスペクターに移動して、そこで変更します。

enter image description here



スクリーンショットの上部にある警告に関する限り:

中央の制約を伴う先行および後続の制約がクリッピングを引き起こす可能性がある問題を修正しました

これは、まったく同じ警告が表示されていた自分のアプリのスクリーンショットです。

enter image description here

@記号が付いたラベルをボタンの先頭と末尾に設定しましたが、中心を評価ラベルに合わせました。中央の配置制約を削除すると、警告は消えましたが、不適切にレイアウトされたオブジェクトのセットが残っていました。

そのとき、私はスタックビューを受け入れるに辞任しました。使用するのは面倒ですが、すべての制約と設定を正しく取得すると、警告なしで美しくレイアウトされます。


編集

Reposeはコメントに書き込みます。2つの要素が重ならないようにするため、必要に応じて> = 0を追加するだけで十分な場合があります。

160
Shades

警告ごとに「言語の方向を尊重する」を無効にして警告を黙らせて解決するかどうかを確認できます。拘束を選択して[属性/サイズインスペクタ]を開きます。添付の画像をご覧ください。

pSこのソリューションはiOSに対応しています。 macOSの場合は、警告を黙らせるために> =または<=を試してください。

Disrespect Language Direction

53
Repose

ローカライズされたラベルやボタンの場合、この警告は意味があり、ラベルが重ならないように必要な制約を設ける必要があります。それらが重複していなければ、将来はそうなるかもしれないので、制約を与えても問題ありません。

Xcodeでは、これらの制約を自動的に追加できます。

ストーリーボードのドキュメントのアウトラインで黄色い矢印をクリックし、テキストが画面のどこにあるか(左または右)に応じて "fixed lead"または "fixed trailing"を選択します。これでほとんどの問題が解決します。

Image

テキストなしの ボタンでこの問題がある場合は (画像のみ)、まだボタンに設定されている可能性がある「デフォルトのタイトル」を削除してみてください。

Image

27
Pascal

Labelsを使うと、0警告を削除するためにLinesMinimum Font Sizeに設定し、AutoshrinkプロパティをFixed Width Constraints May Cause Clippingに設定できます。

enter image description here

25
Lionking

もう一つの迅速な解決策!

UIButtonの場合、タイトルをプレーンテキストから属性付きテキストに変更することで、私の問題も解決しました -

enter image description here

12
dreamBegin

私はこの質問はすでに答えられていることを知っていますが、私の場合このエラーを修正するために行ったのは "Aspect ratio"プロパティを追加して幅や高さの制約を取り除くことでした。同じ出力と私の見解を異なる機器に適応させます。

4
reojased

Swift 4、Xcode 9.1:

この問題について、私はあなたのオブジェクトだと思います それがスーパービューの文脈の中で正しい中心位置が何であるかわからない そしてremove、より大きい、または他の主要な設定を使う正しく動作しません。まず、あなたのスーパービューの正しい制約をチェックしなければなりません。

スーパービューが正しく設定されている場合は、 "Container in horizo​​ntal" 制約を設定することで、ビュー内の正しい位置をオブジェクトに "説明"することができます。

enter image description here

3

私はXcode 9に移行したときに同じ問題を抱えていて、ある種のレイアウトに役立つアプローチを見つけました。私の場合は、2つの列(UILabels)が固定幅で、もう1つが可変幅であるテーブルヘッダーが必要でした。列幅をどのように指定したかに関係なく(等しいなどの代わりにより大きいか等しい制約を使用するなど)、クリッピングの可能性についての警告を受け続けました。私の場合は、必要に応じて可変幅列(UILabel)を切り取りたいと思いました。私はただ警告を無視したかもしれませんが、それをするのが好きではありません。

ここでうまくいったアプローチは、適切なサイズの制約でUIViewを作成し、UILiewをUIViewのサブビューとして埋め込むことでした。その後、必要に応じて切り捨てが行われ、警告が表示されません。これは、UIView/embedded UILabelがStackViewにあるかどうかにかかわらず動作します。

これは本質的にHaroldo Gondimと同じアプローチですが、ここではStackViewがあってもなくても機能することがわかります。

次の図は、StackViewを使用した場合と使用しない場合の方法を示しています。 "SpacerName"はラベルを含む可変幅のUIViewで、 "SpacerPD"は80の固定幅のものです。[色は重要ではありません。ビューがどこにあるかを示すためにそこにちょうどあります。

enter image description here

1
Tom Linton

私は同じ問題を抱えていましたが、>=に変更すると自動的に定数を0に設定します。例えば60を選択すると、警告が再び表示されます。だから私は問題とループしていました。

LabelViewに埋め込むことを修正できます

Editor > Embed In > View

Labelでは、TopBottomLeadingおよびTrailingconstant = 0で設定します。

constraints

Viewには、私が以前期待していたconstraintsを設定しました。

1
Haroldo Gondim

エラーを修正するには :固定幅の制限によりクリッピングやその他のローカライゼーションが発生する可能性があります。に等しい:

Size Inspector

エラーを修正するには :Leading/Trailing制約が欠落しているため、他のビューと重なっている可能性があります。

これは、ビュー/オブジェクトXcodeが不平を言っている、隣接ビューに対する先行または後続の制約がないことを意味します。

コントロールを押したままビュー/オブジェクトの近くまでドラッグする

Contrl + PressClick

前後の制約を追加する

Leading/Trailing Constraint

0
Manny

スーパービューの端から同じパディングを持つボタンを使用しようとしたときにも、同様の問題がありました。

Error case

私は結局、horizontal center制約とequal widths制約をsuper viewに使用することになりました。

My solution

0
Pei

下の画像からわかるように、テキストボックスを垂直方向の中央に配置し、ラベルに左マージンの制限を設定しているにもかかわらず、エラー「 "固定幅の制限によりクリッピングが発生する" がありました。ラベルに関連してテキストボックスの制約を定義していなかったので、XCodeはテキストボックスがラベルの上でクリップする(上にレンダリングされる)ことを私に警告していました。

enter image description here

ラベルから一定の距離を保つためにテキストボックスに左側の制約を追加した後、エラーはXCodeによって解決されたと見なされ、制約の警告が表示されなくなりました。

0
Ulysses Alves

ボタンに固定幅の制限が必要な場合は、幅制限の優先順位を700に設定してください。

0
ChikabuZ