1

コードで UITableView を作成していますが、サイズを制約付きで設定したいのですが、tableView が表示されません:

_tableView = [[UITableView alloc] initWithFrame:CGRectZero];
_tableView.translatesAutoresizingMaskIntoConstraints = NO;
_tableView.autoresizingMask = UIViewAutoresizingNone;
_tableView.delegate = self;
_tableView.dataSource = self;
[self.view addSubview:_tableView];

NSDictionary *views = @{ @"tableView": self.tableView};
[constraints addObjectsFromArray:[NSLayoutConstraint constraintsWithVisualFormat:@"V:|-10-[tableView]-10-|" options:0 metrics:nil views:views]];
[constraints addObjectsFromArray:[NSLayoutConstraint constraintsWithVisualFormat:@"H:|-10-[tableView]-10-|" options:0 metrics:nil views:views]];

[self.view removeConstraints:self.view.constraints];
[self.view addConstraints:constraints];

制約なしでのみinitWithFrame:self.view.bounds、テーブルを使用すると表示されます...何が欠けていますか?

編集: tableView を初期化する場合は役に立ちませんself.view.bounds

EDIT 2: viewDidLoad にもあるものを削除すると、すべて問題ないように見えself.view.translatesAutoResizingMaskIntoConstraints = NO;ます-なぜそれが許可されないのですか?

4

1 に答える 1

2

self.view.translatesAutoResizingMaskIntoConstraints = NO; を削除すると、すべて問題ないようです。これは私のviewDidLoadにもあります-なぜそれが許可されていないのですか?

答えが見つかってよかったです。ここに説明があります。

システムによって管理されるView Controllerビューの場合、次のものが含まれますが、これらに限定されません:

  • ウィンドウのルート ビュー コントローラー
  • ナビゲーション コントローラーにプッシュされたビュー コントローラー
  • タブバーコントローラーのオプションの 1 つ

自動レイアウトをオンにしたくない。のサイズと位置はview、これらの状況で決定する View Controller までではなく、含まれているオブジェクトがビューのサイズをどのように調整しているかはわかりません。自動レイアウトを使用する場合は、自動サイズ変更マスク変換プロパティ自体をオフにします。

ビュー コントローラーのビューを自動レイアウト ビューにするのは、ビュー コントローラーを別のビュー コントローラーの子ビュー コントローラーとして使用していて、制約を使用して子ビュー コントローラーのビューのサイズと位置を決めたい場合のみです。その場合でも、おそらく View Controller 内でプロパティを設定せず、親に任せます。

階層内のすべてのビューで自動レイアウトをオンにする必要はありません。Autolayout ビューは、「レガシー レイアウト」ビュー内で問題なく使用できます。

于 2013-09-17T15:10:22.293 に答える