回答:
更新3:
この警告はnumberOfLines
、デプロイメントターゲットが7.1に設定されている場合に1以外に設定されているラベルによってもトリガーされます。これは、新しいシングルビュープロジェクトで完全に再現可能です。
再現する手順:
次のレーダーを提出しました:
rdar:// problem / 18700567
更新2:
残念ながら、これはXcode 6のリリースバージョンでも同様です。ほとんどの場合、ストーリーボード/ xibを手動で編集して問題を修正できます。以下のコメントのチャールズA.によると:
この警告を誤って簡単に紹介してしまう可能性があり、警告自体は犯人であるラベルを見つけるのに役立ちません。これは、複雑なストーリーボードでは残念です。ストーリーボードをソースファイルとして開き、正規表現で検索して
<label(?!.*preferredMaxLayoutWidth)
、preferredMaxLayoutWidth属性/値を省略しているラベルを見つけることができます。そのような行にpreferredMaxLayoutWidth = "0"を追加する場合、これは明示的にマークして値0を設定することと同じです。
アップデート1:
このバグはXcode 6 GMで修正されました。
元の回答
これはXcode6-Beta6およびXCode6-Beta7のバグであり、現時点では無視しても問題ありません。
アップルデベロッパーフォーラムのアップルエンジニアは、バグについて次のように述べています。
優先最大レイアウト幅は、UILabelの自動レイアウトプロパティで、コンテンツに合わせて垂直方向に自動的に拡大できます。Xcodeのバージョン6.0より前のバージョンでは、マルチラインラベルのpreferredMaxLayoutWidthが設計時に現在の境界サイズに設定されていました。水平レイアウトが変更された場合は、実行時にpreferredMaxLayoutWidthを手動で更新する必要があります。
iOS 8は、実行時にpreferredMaxLayoutWidthを自動的に計算するためのサポートを追加しました。これにより、複数行のラベルをさらに簡単に作成できます。この設定はiOS 7との下位互換性がありません。iOS7とiOS 8の両方をサポートするために、Xcode 6ではサイズインスペクターでpreferredMaxLayoutWidthに「自動」または「明示」を選択できます。あなたがすべき:
最高のエクスペリエンスを得るためにiOS 8をターゲットにする場合は、「自動」を選択します。iOS 8未満をターゲットにする場合は、「明示」を選択します。次に、設定するpreferredMaxLayoutWidthの値を入力できます。「Explicit」を有効にすると、ボックスをチェックしたときのデフォルトが現在の境界サイズになります。
警告が表示されるのは、(1)自動レイアウトを使用している、(2)複数行のラベルに「自動」が設定されている[ラベルのサイズインスペクターで確認できる]、(3)デプロイターゲット<iOS 8。
この警告は、自動レイアウトされていないドキュメントに対してこの警告が表示されることのようです。この警告が表示され、自動レイアウトを使用していない場合は、警告を無視できます。
または、問題のストーリーボードまたはxibのファイルインスペクターを使用して問題を回避し、「ビルド」を「iOS 8.0以降のビルド」に変更することができます。
<label(?!.*preferredMaxLayoutWidth)
、preferredMaxLayoutWidth
属性/値を省略しているラベルを見つけることができます。そのpreferredMaxLayoutWidth="0"
ような行を追加する場合は、明示的にマークして値を設定するのと同じです0
。
numberOfLines
た。1以外に設定すると、設定したかどうかに関係なく警告が発生しますpreferredMaxLayoutWidth
。
preferredMaxLayoutWidth
明示的な0 に設定すると、numberOfLines
値に関係なく警告が消えます。しかし、おそらくこれは今朝のXcodeアップデートで修正されたのでしょうか?
大きなストーリーボードで問題のあるラベルを見つけるには、以下の手順に従ってください。
次に、ストーリーボードをソースファイルとして公開します。
探す。内容を見ると、ここからどのラベルなのかが非常に簡単にわかるはずです。
ラベルを見つけたら、「優先幅」を0に設定するのが私の解決策でした。
ところで、インターフェイスアイテムを選択し、IDインスペクターの下を見ることで、インターフェイスアイテムのIDをいつでもすばやく取得できます。とても便利な。
ソースとしてストーリーボードを開かなくても、この問題を修正できます。この警告は、numberOfLines!= 1でデプロイメントターゲットが8.0未満の場合、UILabelsによってトリガーされます
それを見つける方法は?
ソリューションは非常に簡単です
iOS 8以降のビルドを有効にするだけです
現在、私のXcodeバージョンは6.1です。しかし、私もこの警告を受けました。それは私をとても困らせます。何度も検索した後、私は解決策を見つけました。
理由:ストーリーボードでUILabel Lines> 1を設定しておく必要があります。
解決策:ストーリーボードでUILabel Lines属性を1に設定します。Xcodeを再起動します。それは私のために働きます、それがより多くの人々を助けることができることを願っています。
あなたが本当にあなたの言葉を2行以上表示する必要がある場合。コードで行う必要があります。
//the words will show in UILabel
NSString *testString = @"Today I wanna set the line to multiple lines. bla bla ...... Today I wanna set the line to multiple lines. bla bla ......"
[self.UserNameLabel setNumberOfLines:0];
self.UserNameLabel.lineBreakMode = NSLineBreakByWordWrapping;
UIFont *font = [UIFont systemFontOfSize:12];
//Here I set the Label max width to 200, height to 60
CGSize size = CGSizeMake(200, 60);
CGRect labelRect = [testString boundingRectWithSize:size options:NSStringDrawingUsesLineFragmentOrigin attributes:[NSDictionary dictionaryWithObject:font forKey:NSFontAttributeName] context:nil];
self.UserNameLabel.frame = CGRectMake(self.UserNameLabel.frame.origin.x, self.UserNameLabel.frame.origin.y, labelRect.size.width, labelRect.size.height);
self.UserNameLabel.text = testString;
私は50の評判を持っていないので、Stackoverflowは2番目に良い答えについてコメントさせません。ストーリーボードで犯人のラベルを見つけるための別のトリックを見つけました。
ラベルのIDがわかったら、ビューコントローラーが表示された別のタブでストーリーボードを開き、コマンドFとコマンドVを実行するだけで、そのラベルに直接移動できます:)
私は、W / Hの選択で持っていた元のレイアウトを選択することで機能しました。ストーリーボードは期待どおりに機能しており、エラーは発生していません。
iOS 8.0向けに開発していることも確認してください。プロジェクトの一般設定から確認してください。
私はこの問題を抱えていて、ラベルの最大値を決定するための制約を追加することでそれを修正することができました。
マルチラインラベルをドロップするときに、親ビュー内の幅を強制するように設定された制約はありません。これが新しいPreferredMaxWidthの出番です。iOS 7以前では、最大幅を自分で定義する必要があります。ラベルの左側と右側に10pxの制約を追加しただけです。
また、問題を修正する<=幅制約を追加することもできます。
したがって、これは実際にはバグではなく、最大幅を自分で定義する必要があります。他の回答での明示的なオプションの言及は、この幅の値を設定するときにも機能しますが、(幅を明示的に設定したため)親の幅に基づいて最大幅を変更する場合は、この値を変更する必要があります。
上記のソリューションでは、親ビューの大きさに関係なく、常に幅が維持されます。