2017-02-02 36 views
0

これはAutoLayoutやXcodeのバグかどうかわかりませんが、ストーリーボードのデバイスと同じサイズでないデバイスでアプリケーションを実行すると、要素が間違ったサイズを採用しています。UITableviewcellの幅が画面いっぱいにならない

I.e. iPhone SEとしてのビューの選択とiPhone 7以上でのアプリケーションの実行my tableviewのサイズはiPhone SE画面の幅です。ビューをリロードすると修正され、その後iPhone 7+の画面の幅が採用されます。

テーブルビューには固定幅がなく、上下左右に0の間隔で固定されています。また、コード内でプログラムでセルの高さを変更していますそれにも影響を与える可能性があります。

ビデオ:https://drive.google.com/open?id=0B0QLbDLfJn6_YzljUGg4RTUwaTg

+0

にself.view.layoutIfNeededしてみてください...私はあなたの質問が、これはバグであるかそうでないと仮定しますか? – jabbathehutt1234

+0

ビューをどのように再読み込みしますか? – NRitH

+0

はい、それはタブベースのアプリケーションなので、タブアイコンを選択して別のビューに移動して戻ってきたら、今度はビデオを添付します。 – Tunds

答えて

0

私はこれを再作成するように見えることはできません。私は、Xcodeと開発者ツール(softwareupdate --install -a)の更新を二重に確認することをお勧めします。

していない場合は、Xcodeを再起動してください。

編集:この回答は無視してください。Mike Sand's投稿を読んでください。

+0

XCodeは最新であるため、更新する必要はありません。 – Tunds

+0

奇妙です。おそらくキャッシュをクリアしますか? – jabbathehutt1234

+1

これはxcodeのバグではありません。 'viewDidLoad'に幅' self.view.frame.size.width'のサブビューを追加することでこれを再現することができます。サブビューは、幅がInterface Builderにあったものを常に持ちます。 –

2

xib(またはストーリーボード)からのビューは、作成時にビュー階層に追加される前にIBフレーム値を持ちます。したがって、あなたのようなケースでは、レイアウトプロセスの一部となってサイズ変更される前に、xibからロードされたビューに何かがアクセスしている可能性があります。

これは、離席して戻ったときに修正された理由を説明します。最初は値が確定する前に値を取得しましたが、値がすでに最終的で正しい値になっています。

ビューコントローラでviewDidLoad()から呼び出されたレイアウトコード、またはビュー用にawakeFromNib()またはinitWith(coder:)が発生する可能性があります。 viewDidLoad()から呼び出されたレイアウトコードは、iPhone 5sまでうまくいたので問題がありましたが、この問題が発生します。

これからちょうどその問題を正確に言うことは不可能です。ビデオに表示されるNSLogステートメントから、問題は「天気の幅」と呼ばれるコードです。これは、レイアウトプロセスでは早すぎると呼ばれています。 viewWillAppearまたはviewWillLayoutSubviewsに入る必要があります。正しい値は、それに依存する計算のために準備ができていることを確認してください。お役に立てれば。

+0

いいですね。ありがとう! – jabbathehutt1234

0

は、のviewDidLoadまたはviewWillAppear非常に奇妙である

関連する問題