web-dev-qa-db-ja.com

UIViewのフレームの設定が機能しない

IOS 7のフレームプロパティに問題があります。viewDidLoadUIViewControllerメソッドでいくつかのUIViewのサイズを変更したいのですが、int screenHeight = [[UIScreen mainScreen] bounds].size.height; [self.leftSideTableView setFrame: CGRectMake(0, 0, 320, screenHeight)];のように変更すると高さはメソッドの最後まで好きなように設定されていますが、他のすべてのメソッドでは以前と同じです!

それの何が問題になっていますか、それともコンパイラのバグか何かですか?

21
MyJBMe

ビューのサイズ変更を-viewDidLayoutSubviews:に入れる必要があります! (ドキュメント)

ビューがまだレイアウトされていないため、ビューフレームの変更を-viewWillAppear:または-viewDidLoad:に配置しても機能しません。

73
MyJBMe
  • Xibファイルでautolayoutを使用しているかどうかを確認します。 autolayoutを使用しない場合は、xibファイルでオフにします。

  • self.leftSideTableViewフレーム-viewWillAppear:

11
liuyaodong

ストーリーボードファイルで自動レイアウトがアクティブになっていないことを確認してください。

オフにするには、インターフェイスビルダーのインスペクターを確認します。左端にあるページのようなアイコンをクリックします。 「Interface Builder Document」セクションで、「Use Auto Layout」のチェックを外します。

自動レイアウトを使用したIB内のビューコントローラ全体、または完全にコード内が最適です。 2つを混在させると、デバッグが困難な奇妙な動作が発生する可能性があります。

8
lancejabr

これが発生する理由はいくつかあります。まず、テーブルビューがnilでないことを確認する必要があります。プログラムで作成する場合は、フレームを設定する前にalloc/initをどこかで呼び出していることを確認する必要があります。 self.leftSideTableViewはIBOutletです。これは、アウトレットをインターフェイスオブジェクトに実際にリンクし忘れたことが原因である可能性があります。

次に、可能性は低いですが、プログラムでテーブルビューを作成して適切に初期化していますが、画面ビューの1つのサブビューとして追加するのを忘れています。

1
Mick MacCallum