Xcode 9-「固定幅制約によりクリッピングが発生する可能性があります」およびその他のローカリゼーション警告


147

新しいXcodeをダウンロードしましたが、Interface Builderで次のような警告に関する大量の問題が発生しています。

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

次のようになります。

ここに画像の説明を入力してください

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

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


自動サイズ変更を確認することをお勧めします
Dark Innocence

3
こっちも一緒。すべての言語で50pt幅であることが保証されているボタンがあります。なぜこれを使って私のきれいな自動レイアウトレポートカードを汚すのですか?
ジョンスカロ2017

9
これは間違いなく大きな問題であり、それについてそれ以上話さないのは驚くべきことです:O
Fattie

2
英語のみのローカリゼーションでもこのエラーが発生します。
シェード2017

6
他の人のために、あなたが任意のローカライズ版があり、単にこれらの警告は消えてしたくない場合は、ここで示されているように、その後Base.iprojフォルダの外にストーリーボードを移動:stackoverflow.com/a/45040394/1807644
ウィリアム・T.

回答:


179

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

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

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

ここに画像の説明を入力してください


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

ここに画像の説明を入力してください



スクリーンショットの上部にある警告まで:

中央制約のある先行制約と後続制約がクリッピングを起こす可能性がある

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

ここに画像の説明を入力してください

@記号がボタンの先頭と末尾に設定されているラベルと、中央を評価ラベルに揃えるラベルを用意しました中央揃えの制約削除すると、警告は表示されなくなりましたが、オブジェクトのレイアウトが不適切に配置されていました。

そのとき、私は自分を辞任してStack View採用しました。使用するのが面倒なので、すべての制約と設定を正しく行うと、レイアウトは美しく、警告なしでレイアウトされます。


編集する

安息はコメントに書いて、単に> = 0を追加すると、あなたは二つの要素が重複していないことを確認作っているように、何が必要になります。


2
> = 0は、以前に発生していた重複および修正された重複の問題を回避し、Leading / TrailingをRight / Leftに変換して、クリッピングエラーを修正しました。結果は異なる場合があります。ソフトウェア開発を始める前に医師にご相談ください。
2017

@Reposeそのとおり。何がうまくいかないかを考え、制約を追加して問題がないことを確認します。
シェード2017

iOSでStack Viewを使用することを辞任しても問題ないかもしれませんが、OS X(申し訳ありませんがMacOS)の場合は、常に良い選択とは限りません。アップルはそれを知っている必要があります。UIとUXの概念には、多くの場合、異なる前提があります。
ジョアンズ

2
UIStackViewを採用することに同意します。それは間違いなく苦痛でした、そして私はいくつかの制約でそれをやろうとしました、私は別のUIStackViewを追加しました、そしてそれは完璧にレイアウトしました。
templeman15 '31 / 10/31

1
他のオプションはありますか?コントロールを固定幅にしたい場合はどうなりますか?
カンパイ

60

制約ごとに「言語の方向を尊重する」を無効にして、警告を止めて効果があるかどうかを確認できます。制約を選択して、属性/サイズインスペクターを開きます。添付の画像をご覧ください。

アプリを他の言語にローカライズする予定がない場合は、このソリューションにフォールバックはありません。ローカライズされたアプリの場合、ラベルとフォントサイズをもっと意識する必要があります。

PSこのソリューションはiOSで機能します。macOSの場合、> =または<=を試して警告を止めます。

以下の図のppsラベルは、NSMutableAttributedStringを使用して単一のUILabelまたはUITextViewでAutoLayoutおよびattributedStringプロパティを使用して作成する方がはるかに簡単です。画像はデモンストレーションのみを目的としています。

言語の方向を軽視する


1
「中央の制約による固定された先頭と末尾の制約がクリッピングを引き起こす可能性がある」という問題を修正しました。ありがとう!
toddg '19

4
これを試しても効果がないようであれば、Xcodeを終了して再起動してみてください。そのトリックは私のために働いた。
T'Pol 2017

2
これを選択解除することはできません。
スクーター

1
パーフェクト!これは私にとってはうまくいき、私の制約を変更する必要はありません、ありがとう!
rgkobashi 2018年

1
> =制約は、さまざまな複雑な優先度スキームのために、私に悪影響を及ぼしました。ラベルをビューに挿入する準備ができていましたが、それであなたの解決策が見つかりました!ありがとう:)
KerCodex

33

ローカライズされたラベルとボタンの場合、この警告は意味があり、ラベルが重複しないように必要な制約を提供する必要があります。それらが現在重複していない場合は、将来的に重複する可能性があるため、制約を提供しても問題はありません。

Xcodeはこれらの制約を自動的に追加するのに役立ちます:

ストーリーボードのドキュメントアウトラインで、黄色の矢印をクリックし、画面上のテキストの位置(左または右)に応じて、[先頭を固定]または[末尾を固定]を選択します。これでほとんどの問題が解決します。

Xcodeスクリーンショット

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

Xcodeスクリーンショット


4
私の場合、デフォルトのタイトルを削除すると警告が削除されました。ありがとう!
ReinhardMänner2018

にを追加するUIButtonStoryboarddefault buttonタイトルがになることに注意してくださいbutton
Miguel Tepale

29

を使用するとLabels、次のようにLinesis 0Autoshrinkproperty を設定Minimum Font SizeしてFixed Width Constraints May Cause Clipping警告を削除できます。

ここに画像の説明を入力してください


3
はいあなただけ0にセットラインを必要とする
Reefwing

2
linesを0に設定すると、ラベルが必要な数の行に拡張されますが、これは必要としない場合があります。
nickdnk 2018

@nickdnk:ラベルの高さの制約を固定した場合、ラベルが拡張されないことを知っています。
ライオンキング2018

20

別の簡単な解決策!

タイトルをプレーンテキストから属性付きテキストに変更してUIButtonを作成した場合も、問題が解決しました:-

ここに画像の説明を入力してください


魅力のように働いた!
クラフト

7

私はこの質問にすでに回答済みであることを知っていますが、私の場合、このエラーを修正するために「アスペクト比」プロパティを追加し、幅または高さの制約を排除することでこれはかなりうまく機能し、労力が少なくなりました。同じ出力で、さまざまなデバイスに私の見解を適応させます。


4

Swift 4、Xcode 9.1:

この問題について、あなたのオブジェクトそれが superview のコンテキストで正しい中心位置が何であるかを知らないと思います、そして多くの場合、削除、より大きい、または他のリーディング/リアル化設定を使用すると正しく機能しません。最初に、スーパービューの正しい制約を確認する必要があります。

スーパービューが正しく設定されている場合「コンテナ内で水平に」制約を設定することで、ビュー内の正しい位置をオブジェクトに「説明」することができます。

ここに画像の説明を入力してください


2

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


1

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

に埋め込むことを修正できLabelましたView

Editor > Embed In > View

ではLabelIセットTopBottomLeadingTrailingconstant = 0

制約

View、私は設定constraints私は前に期待していたことを。


1

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

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

これは本質的にHaroldo Gondimのアプローチと同じですが、StackViewの有無にかかわらず動作することがわかります。

次の画像は、StackViewがある場合とない場合のアプローチを示しています。「SpacerName」はラベルを含む可変幅のUIViewであり、「SpacerPD」は80の固定幅のUIViewです。[色は重要ではありません。ビューがどこにあるかを示すためだけにあります。]

ここに画像の説明を入力してください


0

下の画像を見るとわかるように、「固定幅の制約によりクリッピングが発生する可能性がありますというエラーが発生しましたテキストボックスを垂直方向の中央に設定し、ラベルに左マージン制約を設定しましたが、制約を定義していませんでした。ラベルに対するテキストボックスの場合、XCodeはテキストボックスがラベルをクリップ(上にレンダリング)できることを警告していました。

ここに画像の説明を入力してください

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


0

スーパービューの端から同じパディングのあるボタンを使用しようとすると、同様の問題が発生しました。

エラーケース

結局horizontal centerequal widths制約とへの制約を使用してしまいましたsuper view

私の解決策


-1

エラーを修正するには:固定幅制約によりクリッピングが発生する可能性があります "およびその他のローカリゼーションビュー/オブジェクトを選択し、[サイズインスペクタの表示]に移動して、幅制約を見つけ、定数を次の値以上に設定する必要があります。

サイズインスペクター

エラーを修正するには:先頭/末尾の制約がないため、他のビューと重複する可能性があります

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

コントロールを押しながら、ビュー/オブジェクトで近くにドラッグします

Contrl + PressClick

先頭または末尾の制約を追加する

先頭/末尾の制約


警告の三角形をクリックすると、Xcodeはワンクリックでこれらを自動的に作成します。
lensovet
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.