autoresizingMaskを使用してのUITableViewの間違ったサイズ
-
19-09-2019 - |
質問
私は(iPhone 3.0で)autoresizeMaskを用いて適切にサイズ変更されていないのUITableViewを有している。
のUITableViewは、プログラム的に作成されているすべてがUITabBarController内部UINavigationController、内部のUIViewController内にあります。ステータスバーが表示されます。
のUIViewControllerのコードは基本的に
- (void)loadView {
UIView* rootView = [[UIView alloc] init];
self.view = rootView;
[rootView release];
}
- (void)viewDidLoad {
[super viewDidLoad];
// table = [[UITableView alloc] initWithFrame:CGRectMake(0, 0, 320, 480-20-49-44)];
table = [[UITableView alloc] initWithFrame:CGRectMake(0, 0, 320, 100)]; table.autoresizingMask = UIViewAutoresizingFlexibleHeight;
[self.view addSubview:table];
}
このように作成すると、のUITableViewは使用可能なスペースよりも少し大きいです。私は間違っていない場合、それは、ナビゲーションバーのサイズを正確に44ピクセル大きいです。
私は次の行をコメント行のコメントを解除し、コメントする場合は、しかし、のUITableViewのサイズは正確に正しいです。私は手動でのUITableViewのサイズを計算するのではなく、autoresizingMaskを使用することを好むだろう。私が間違って何をしているのですか?
事前にありがとうございます!
解決
問題は、私はloadViewメソッドでルートビューの枠を設定していませんでしたということのようです。あなたは、このようなフレームを定義し、そのフレームに関連してサブビューのフレームを定義する場合は、自動サイズ変更マスクが正しくルートビューはフレームワークによってリサイズされた方法に応じてサブビューのサイズを変更します。
例
- (void)loadView {
UIView* rootView = [[UIView alloc] initWithFrame:CGRectMake(0, 0, 320, 480)];
self.view = rootView;
[rootView release];
}
- (void)viewDidLoad {
[super viewDidLoad];
table = [[UITableView alloc] initWithFrame:self.view.frame];
table.autoresizingMask = UIViewAutoresizingFlexibleHeight;
[self.view addSubview:table];
}
正しい方向に私を指摘コリンGislasonに感謝します。
他のヒント
自動サイズ変更マスクは、テーブルビューの初期サイズであなたを助けにはなりません。テーブルビューは、あなたがそれを与えるフレームを使用して作成されます。自動サイズ変更マスクは、親ビューに対するこのフレームの相対サイズを変更するための規則を定義するとき、親のフレームが変更
私は320×100で、テーブルを定義する場合、私は親ビューのフレームの変更を明示的に変更したりしない限り、それは、そのサイズが滞在するようにします。
他のビューに応じて、親または親のフレーム自体が保持している他のビューに基づいて計算を行うことができます。
のUITableViewControllerサブクラスののUIViewControllerサブクラスinstandを作成します。
のUITableViewのインスタンスを挿入します。
NIBで単にのUIViewをドラッグ&ドロップ
そのwier場所の上に既存のUITableViewオブジェクトます。
ニブまたはviewDidLoadメソッドを介してのUITableViewのサイズを設定します。
ペン先を介して基準、データソースとデリゲートを設定します。
現在、単にのUIViewControllerクラスを転送し、あなたが望むようにテーブルビューのサイズを変更することができます。