Xcode 8にアップデートした後のレイアウトの問題


102

Xcode 8にアップグレードした後の画面の前と後を次に示します。
私が行ったのは、main.storyboardを開いて、そこから自分のアプリをビルドし、スマートフォンで実行しただけです。
私のバージョン管理では、Xcodeがmain.storyboardを開いただけで多くの変更を行っていることがわかります。
これらの変更を削除すると、Xcode 7.3.1で使用していたものを確認できます。
しかし、ストーリーボードを使用してインターフェイスビルダーを再度開くとすぐに、これらの変更が元に戻るのがわかります。

ここで私にできることはありますか?

Xcode 8より前

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

Xcode 8への更新後

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


新しいソースでXCode 8をもう一度開いてみてください(以前に行った変更をすべて隠します)。ストーリーボードを開いたら、すべてのUIアイテムを強調表示して、[フレームの更新]をクリックします。これで問題が解決する可能性があります。
d1str0 2016

6
bugreport.apple.comでバグを報告して、これが発生しているストーリーボードを添付できますか?これをさらに分析したいと思います。
Quinn Taylor

1
まったく同じ問題があります。Xcode8でストーリーボードを開き、「初期デバイスビューの選択」ダイアログを受け入れた後、すべてがおかしな動作をしています。すべてのフレームを更新すると、IBは正常に見えますが、ビルド後、アプリは完全に壊れています。4つのアプリでテストしました。
Cherrypig 2016

@QuinnTaylor同様の問題が発生しています。Xcode8がストーリーボードを変換した後、UITableViewsのUIImageViewsにコンテンツが表示されませんが、アウトラインはに表示されDebug View Hierarchyます。UICollectionViewsにある同じクラスの他のオブジェクトは影響を受けません。
マヌエル

XIBまたはStoryboardがデフォルトを古いバージョン7.xに設定し、保存して閉じる。一時的な解決策ですが、機能します。保存して閉じると、再度開かないでください。それ以外の場合は、最初から同じ手順を繰り返す必要があります。
Bhavesh Kumbhani

回答:


111

ストーリーボードファイルをXcode8互換に変換すると、テーブルビュー画像が表示されないという同様の問題が発生しました。これはXcode8のバグのように見えるので、バグ修正がリリースされるまで、次の回避策があります。

  1. Xcode 8でストーリーボードを開き、初期デバイスビューを選択します。通常どおりに変更します。
  2. 変更が完了したら、ストーリーボード->ファイルインスペクター-> [次の場所で開く]-> [Xcode 7.x]を選択します。

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

  1. プロンプトが表示されたら「保存して閉じる」を選択します
  2. ストーリーボードの変更が保存され、ストーリーボードはXcode8より前と同じように機能します。

ストーリーボードファイルに他の変更を加える必要がある場合は、これらの手順を再度実行します。


わあ、確かに+1。私は、TodayExtension内のiOS 10でこれに苦労しました。Xcode 8によってストーリーボードXMLの疑わしい編集が追加されているのを見たのは、git diffを分析して物事を絞り込んだ時でした(Xcode 7のストーリーボードドキュメントを保存した後、編集して)、ビルドして出荷できるようになりましたXcode 8 for iOS10。ありがとう。
John Erck 2016

確かにバグのようです。Xcode 7.xでOpenとして保存すると、一時的な回避策として機能しました。
スティーブA

この投稿が見つかるまで、私は過去3日間、壊れたレイアウトをXcode8のあちこちに修正することに費やしました。たぶんあなたはAppleよりもあなたのような人を信頼すべきだろう。これが私の時間の多くを無駄にしたとは信じられません。デイビッド、ありがとうございました!
Xu Yin

@XuYinすべてのストーリーボードでこれを行う必要がありますか?プロジェクトに別のストーリーボードがある場合はどうなりますか?Xibファイルについてはどうですか?それらのためにも私はそれをすべきですか?
ハニー、

@ハニー私はストーリーボードでそれをしませんでしたが、問題があるすべてのxibファイルでそれをしました。しかし、奇妙なレイアウトの問題が発生した場合は、ストーリーボードでも試してみたいと思うかもしれません。その修正は5秒程度しかかかりませんので。そして、アプリを再構築した後、あなたは非常に素早く修正を見ることができるはずです。
Xu Yin

14

XIBまたはStoryboardがデフォルトを古いバージョン7.xに設定し、保存して閉じる。一時的な解決策ですが、機能します。保存して閉じると、再度開かないでください。それ以外の場合は、最初から同じ手順を繰り返す必要があります。ここに画像の説明を入力してください


6
ファイルで作業する必要があるため、これは役に立ちません。これは、下位互換性のためにファイルを保存するだけです。それはXIBは、Xcodeの8で編集することはできません
jowie

私はこれを行っていますが、ドロップダウンでxibファイルを選択すると、xcode 8.0のみが表示されます...
jayant rawat

8

えっと同じ問題。私は部分的に次の方法でそれを修正することに成功しました(Xcodeバージョン8.1(8B62)の場合

ストーリーボードのドキュメントの概要で、いくつかのレイアウトの問題を示す黄色の矢印のある各シーンをクリックしました(スクリーンショットの1)

この後、問題のあるシーンごとに、「フレームの更新」の小さいアイコン(スクリーンショットの2番)をクリックする必要があり、シーンごとのレイアウトの問題がすべて修正されました。

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

しかし、私の場合、1つのシーンはXcode7からXcode8への移行後もまだ泣いている状態でした。制約を調整するか、足りない制約を追加して、手動で修正する必要がありました。

XCode8とStoryboardsの驚きではありません。AppCodeエディターを使用している場合は、ストーリーボードをサポートしていないため、このような問題は発生しません; P

幸運を!



6

可能な解決策については、スレッドに従ってください:(私はそれが多くの開発者に起こると思います)。
Xcode 8 GMシードストーリーボードの問題
Xcode 8-以前のストーリーボードが歪む

(私はanyH anyW幅600を使用しました)XcodeがXcode 8に更新されると、すべてのViewControllersサイズが変更されました。その結果、すべてのレイアウトが歪んだ。
現在、この問題の解決策は3つしかありません(すぐに修正を待つのは信用できません)。

1.各Viewcontrollerに移動し、で修正しUpdate Framesます。

2. Size Inspector -> Freeform -> 600ほとんどのコントローラーが推測されるため、メインのViewControllerに移動すると、すべてのコントローラーのサイズが変更されます(Appleが導入したい新機能の影響に注意してください)。

3.ストーリーボードのgitでの変更を破棄します(AppleはXcodeにとって重要な更新をいくつか挿入したため、これはお勧めしません)。

Xcode 8(WWDC16)の新しいAutoLayout機能の追加リンク: アプリをアダプティブにする、パート1


1
オプション1が最も賢明で、私にとってはうまくいきました。Mike.Rが指摘しているように、XCodeをだまして問題を修正しようとする場合は注意が必要です。
アーカディボブ2016

オプション1も使用しました(より安全だと思います)。しかし、その時間はかかります。
Mike.R 2016

5

私の場合、Akhil Katejaによって提案されたソリューションが機能し、メインビューの幅と高さもリセットする必要があります。

1)ビューサイズをフリーフォームに設定する

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

2)ビューの幅と高さを元のサイズにリセットします。

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

最後に保存すれば完了です。


4

私にとっての解決策は、問題のあるUIViewControllerをクリックして、 Editor > Resolve Auto Layout Issues > All Views In ... > Updates Frames

新しく選択したデフォルトのビュー(私の場合はiPhone 7)に基づいて、既存の制約に合うようにビューを再配置しました。

また、注意:ナビゲーションバーの配置が間違っているという警告が表示された場合は、UINavigationController / UIViewControllerを選択してから、Attributes Inspector > Bar Visibility > Shows Navigation Barオフにしてから再度オンにしてください。


3

設定すると表示サイズフリーフォームからの推論は、私のために働きました。これは、属性インスペクターの「シミュレートされたメトリック」という見出しの下にあります。


3

同じ問題があり、コントローラーのビュー制約を強制的に更新することで解決しました。次のコードをviewDidLoad()関数に入れます

self.view.layoutIfNeeded()

1
乾杯ビル!その 'layoutIfNeeded'は私のために働いた!(他のすべてを何時間も試した後。)
Ethan Halprin


3

@ david-truong(https://stackoverflow.com/a/39589860/1407528)からの回答が私の場合は機能しないので、同じ状況にある場合は、これを試してください:

  • ここから以前のXcode 7.3.1をダウンロードします:https : //developer.apple.com/download/more/
  • すべての変更を元に戻します(gitのようなコードマネージャーがある場合。そうでない場合は、 ' https://githowto.com/ 'にする必要があります
  • Xcode 7.3.1でプロジェクトを開きます。

すべてのデバイスをiOS 10以降にアップデートした場合、このバージョンのXcodeはそれらのデバイスを互換性のあるデバイスとして認識しません。だから、このトリックで試してください:

  • /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/DeviceSupportに移動します
  • iOS 10または10.1に関連するフォルダーを次の場所にコピーします:/ Applications / Xcode 7.3.1.app/Contents/Developer/Platforms/iPhoneOS.platform/DeviceSupport
  • Xcode 7.3.1でプロジェクトを開きます(既に開いている場合はXcodeを再起動します)
  • 接続されているiOS 10以降のデバイスを選択します
  • プッシュラン

注:Swiftのような新機能はこのトリックでは利用できませんが、プロジェクトをロードしてビルドできるはずです。


3

これが役に立てば幸い

Xcodeを7.3からXcode 8に更新してアプリを実行すると、一部のビューは完全に表示されますが、一部が歪んでいます。次に、nibファイルを確認したところ、特定のデバイスサイズを選択し、それに従ってnibを表示するように求められましたもちろんないデバイスサイズAny-Any(Xcode 7.3)。そのため、すべてのnibsファイルが正しく表示されていません。

私からの解決作業:-下の画像に示すように黄色の矢印を押してください

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

それはのようなオプションを示すポップアップを要求します

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

checked.itで選択するUpdate FramesApply to all views in container、歪んだUIの約90%が解決され、残りの自動レイアウト制約の問題は手動で解決できます。


これもレイアウトを台無しにするかもしれません。私見これは注意深く、一度に1つのビューで、続行する前に問題が解決したかどうかを確認して行う必要があります。
ブレインレイ2017年

はい、もちろんあなたはそれのためにいくらかの時間を費やす必要があり、このソリューションは、あなたのUIの一部を更新したいときのように、より長い実行であなたを助けるかもしれません。
Anurag Bhakuni 2017年

1

Xcodeバージョン7.3.1を使用して問題を修正しました。アップルの開発者ポータルから.dmgファイルをダウンロードできます。私はすべてのアプリで自動サイズ変更を使用しましたが、それは私にとってはうまくいきます。このバグを修正できる場合にのみ、Xcode 8に更新します。

ここからダウンロード:https : //developer.apple.com/services-account/download?path= / Developer_Tools / Xcode_7.3.1 / Xcode_7.3.1.dmg


iOS 10をサポートする場合、このソリューションは
役に立ち

1

同様の問題を修正するために、xibをFreeform(推論ではない)として構成し、xibファイルをXcode 7.x互換として保存しました。私の場合、両方の手順が必要でした。お役に立てば幸いです。


1

Xcode 8.2の1つの新しいボタンに気づきました(画像のオレンジ色の円を確認してください)。それはあなたにいくつかの助けを与えるでしょう。

手順:1.ストーリーボードを開き、任意のデバイスを選択します。2.ビューコントローラを選択します。3.上記のボタンをクリックします(画像のように)。4.そのビューコントローラのフレームが更新され、続行できます。

これ以上の解決策は見つかりませんでした。見つかった場合は返信してください。

IBスクリーンショット


何も起こらなかった。
Muju

0

viewdidloadの制約とレイアウトサブビューを更新すると、問題が解決します

- (void) viewDidLoad {
        [self.view updateConstraints];
        [self.view layoutSubviews];
        [super viewDidLoad];
}
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.