アプリのルート以外の場所にある UISplitViewController に相当するものを必要とする設計があります。それはなんらかのばかげた理由で (Apple に感謝します) 違法であるため、その特定の側面を手作業で書き直さなければなりませんでした。
テーブルはランドスケープ モードでは適切にレイアウトされますが、ポップオーバーに移動すると、奇妙な問題が発生します。もともと、キーボード用のスペースを確保するためにポップオーバーを縮小するのに十分な長さのポップオーバーがあったため、TableView が大きすぎて切り取られてしまいました。だから私はポップオーバーを縮小しました...そして今、データをリロードするとTableViewは縮小しています(ユーザーが検索キーを入力するときに行う必要があります)。エラーは、tableView を reloadData した後にのみ表示されることに注意してください。クリッピングの代わりに、上部と下部で「バンド ボクシング」が縮小されるようになりました。
フレームデータに対してクエリを実行すると、tableView が奇妙に表示され、高さが維持されます。それが何を意味するのか、私にはわかりません。ポップオーバーを閉じて表示しても問題は解決しませんが (ポップオーバーが大きくなってしまうと思いますか?)、キーボードを思い出すと問題は解決します (ポップオーバーは正しい高さに縮小します)。(積極的に入力しているユーザーにとっては面倒なので、修正として試したくありません)。
編集:
重要な場合、私が適用した唯一の自動レイアウトは UITableView です。幅と高さが固定されています。スーパービューを参照しようとするとエラーが発生することを除いて、間違いだった可能性のある X または Y データはありません。
編集:要求されたコード(申し訳ありませんが、これは非常に大きくて醜いブロックです):
-(void)setupViewsAfterRotation
{
if (UIInterfaceOrientationIsPortrait([UIApplication sharedApplication].statusBarOrientation)) {
[self.searchTable.view removeFromSuperview];
self.popover=[[UIPopoverController alloc] initWithContentViewController:self.searchTable];
self.navigationItem.leftItemsSupplementBackButton=YES;
self.navigationItem.leftBarButtonItem=[[UIBarButtonItem alloc] initWithTitle:@"Search"
style:UIBarButtonItemStylePlain
target:self
action:@selector(presentPopover)];
[self setupPortraitConstraints];
//NSLog(@"Intrinsic size data: width: %f and height: %f",self.searchTable.view.intrinsicContentSize.width, self.searchTable.view.intrinsicContentSize.height);
//NSLog(@"Runtime size data: width: %f and height: %f",self.searchTable.view.frame.size.width, self.searchTable.view.frame.size.height);
} else {
[self.popover dismissPopoverAnimated:NO];
self.popover=nil;
self.navigationItem.leftBarButtonItem=nil;
[self.view addSubview:self.searchTable.view];
[self setupLandscapeConstraints];
}
}
-(void)setupLandscapeConstraints
{
if (self.tableViewConstraints) {
[self.view removeConstraints:self.tableViewConstraints];
self.tableViewConstraints=nil;
}
NSMutableArray *landscapeConstraints=[[NSLayoutConstraint constraintsWithVisualFormat:@"|[tableView(==256)]"
options:0
metrics:nil
views:@{@"tableView": self.searchTable.view}] mutableCopy];
[landscapeConstraints addObjectsFromArray:[NSLayoutConstraint constraintsWithVisualFormat:@"V:|[topLayoutGuide][tableView]|"
options:0
metrics:nil
views:@{@"tableView": self.searchTable.view,
@"topLayoutGuide":[self topLayoutGuide]
}]];
self.tableViewConstraints=landscapeConstraints;
[self.view addConstraints:self.tableViewConstraints];
}
-(void)setupPortraitConstraints
{
if (self.tableViewConstraints) {
[self.view removeConstraints:self.tableViewConstraints];
self.tableViewConstraints=nil;
}
NSMutableArray *portraitConstraints;
if (self.keyboardHeight) {
NSLog(@"Height set to 612");
portraitConstraints=[[NSLayoutConstraint constraintsWithVisualFormat:@"V:[tableView(==612)]"
options:0
metrics:nil
views:@{@"tableView": self.searchTable.view}] mutableCopy];
[self.popover setPopoverContentSize:CGSizeMake(256, 612) animated:YES];
}
else{
NSLog(@"Height set to 768");
portraitConstraints=[[NSLayoutConstraint constraintsWithVisualFormat:@"V:[tableView(==768)]"
options:0
metrics:nil
views:@{@"tableView": self.searchTable.view}] mutableCopy];
[self.popover setPopoverContentSize:CGSizeMake(256, 768) animated:YES];
}
[portraitConstraints addObjectsFromArray:[NSLayoutConstraint constraintsWithVisualFormat:@"[tableView(==256)]"
options:0
metrics:nil
views:@{@"tableView": self.searchTable.view}]];
self.tableViewConstraints=portraitConstraints;
[self.searchTable.view addConstraints:self.tableViewConstraints];
}