私はXcode 6 beta 6で既存のiOSプロジェクトを開きました、そしてXcodeはストーリーボードとXibファイルの両方のために以下の警告をリストします:
自動優先最大レイアウト幅は、8.0より前のiOSバージョンでは使用できません。
以下のように幅を明示的に設定して、警告に対処してみました。
それでも、これで警告は解決されませんでした。どうやってそれらを削除することができますか?
更新3:
この警告は、デプロイメントターゲットが7.1に設定されている場合にnumberOfLines
が1以外の値に設定されているラベルによっても引き起こされる可能性があります。これは新しいシングルビュープロジェクトでも完全に再現可能です。
再現する手順:
私は次のレーダーを提出しました:
rdar:// problem/18700567
アップデート2:
残念ながら、これはXcode 6のリリース版でも同じことです。ほとんどの場合、ストーリーボード/ xibを手動で編集して問題を解決することができます。下記のコメントの Charles A. によると:
それはあなたがこの警告を偶然にも簡単に紹介することができることを言及する価値があります、そして警告それ自体は犯人であるラベルを見つけるのを助けません。これは複雑な絵コンテでは残念です。ストーリーボードをソースファイルとして開き、regex
<label(?!.*preferredMaxLayoutWidth)
で検索して、preferredMaxLayoutWidth属性/値を省略したラベルを見つけることができます。そのような行にpreferredMaxLayoutWidth = "0"を追加した場合、それは明示的とマークして値0を設定することと同じです。
更新1:
このバグはXcode 6 GMで修正されました。
元の回答
これはXcode6-Beta6とXCode6-Beta7のバグなので、今のところ無視してかまいません。
Apple DeveloperフォーラムのAppleエンジニアは、バグについて言うために this を持っていました:
推奨最大レイアウト幅は、UILabelの自動レイアウトプロパティで、コンテンツに合わせて自動的に垂直方向に拡大することができます。 6.0より前のバージョンのXcodeでは、デザイン時に複数行ラベルのpreferredMaxLayoutWidthを現在の境界サイズに設定していました。水平レイアウトが変更された場合は、実行時にpreferredMaxLayoutWidthを手動で更新する必要があります。
iOS 8では、実行時にpreferredMaxLayoutWidthを自動的に計算する機能が追加されたため、複数行のラベルを簡単に作成できます。この設定はiOS 7との後方互換性はありません。iOS 7とiOS 8の両方をサポートするために、Xcode 6ではサイズインスペクタのpreferredMaxLayoutWidthに "Automatic"または "Explicit"を選択できます。あなたがすべき:
最高のエクスペリエンスを得るためにiOS 8をターゲットにしている場合は「自動」を選択してください。 <iOS 8をターゲットにしている場合は "Explicit"を選択します。設定したいpreferredMaxLayoutWidthの値を入力できます。 [明示的]を有効にすると、チェックボックスをオンにした時点の現在の境界サイズがデフォルトになります。
(1)自動レイアウトを使用している、(2)複数行ラベルに「自動」が設定されている場合(ラベルのサイズインスペクタで確認できます)、(3)デプロイ先が<iOSの場合8。
この警告は自動レイアウト以外のドキュメントに表示されることがバグのようです。この警告が表示され、自動レイアウトを使用していない場合は、警告を無視してもかまいません。
あるいは、問題のストーリーボードまたはxibのファイルインスペクタを使用して「Builds for」を「Builds for iOS 8.0 and later」に変更することで問題を回避することもできます。
大きなストーリーボードで問題のラベルを見つけるには、以下の手順に従ってください。
次に、ストーリーボードをソースファイルとして公開します。
サーチ。内容を見れば、ここからラベルのラベルを簡単に判断できます。
ラベルが見つかったら、私にとってうまくいった解決策は "preferred width"を0に設定することでした。
ところで、あなたはいつでもすぐにアイテムを選択して識別インスペクターの下を見ることによってインターフェースアイテムのidを取得することができます。とても便利な。
あなたはこの問題を修正することができますソースとしてストーリーボードを開かずに。 numberOfLines!= 1でデプロイメントターゲットが8.0未満の場合、この警告はUILabelsによってトリガーされます。
それを見つける方法は?
解決策はとても簡単です
IOS 8以降のビルドを有効にするだけです
まとめると、上記の2つの指示に従ってnumberOfLines = 0から1以上のインスタンスを変更し、ストーリーボードソース内のラベルの各インスタンスにpreferredMaxLayoutWidth = "0"を手動で追加すると、すべての警告が修正されました。
今私のXcodeのバージョンは6.1です。しかし、私もこの警告を受けました。それは私をとても悩ませます。何度も何度も検索した後、私は解決策を見つけました。
理由:ストーリーボードでUILabel Lines> 1を設定しておく必要があります。
解決策:ストーリーボードのUILabel Lines属性を1に設定します。 Xcodeを再起動してください。それは私のために働く、それがより多くの人々を助けることができると思います。
あなたが本当にあなたの言葉を1行以上見せる必要があるなら。あなたはそれをコードの中でやるべきです。
//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は私が二番目に良い答えについてコメントさせてくれません。ストーリーボードで犯人ラベルを見つけるための別のトリックを見つけました。
ラベルのIDがわかったら、ビューコントローラを表示した状態で別のタブでストーリーボードを開き、コマンドFとコマンドVを実行すると、そのラベルに直接移動します。
私はW/Hの選択で持っていたオリジナルのレイアウトを選択することによってそれがうまくいった。ストーリーボードは期待どおりに機能しており、エラーはなくなりました。
IOS 8.0向けに開発していることも確認してください。プロジェクトの全般設定からそれを確認してください。
私はこの問題を抱えており、ラベルの最大値を決定するための制約を追加することでそれを修正することができました。
複数行のラベルをドロップするときに、親ビュー内の幅を強制するように設定された制約はありません。これが新しいPreferredMaxWidthが登場するところです。 iOS 7以前では、最大幅を自分で定義する必要があります。ラベルの左右に10pxの制約を追加しました。
また、問題を解決する<= width制約を追加することもできます。
したがって、これは実際にはバグではありません。最大幅を自分で定義するだけです。他の答えで明示的なオプションの言及はあなたがこの幅の値を設定しているときにもうまくいきますが、もしあなたが(あなたが明示的に幅を設定したように).
私の上記の解決策は、親ビューがどんなに大きくても、幅が常に維持されることを保証します。