この問題を再現するための非常に簡単なテストケースを作成しました。UITableView tableFooterViewがUITableViewの上部に表示されます - 間違って
フッタービューをプログラムでテーブルビューに設定しようとしています。私はテーブルビューの一番下のフッターを参照しています - セクションフッタではありません(ほとんどのスタックオーバーフローの答えはそれらを混乱させます)。
- (void)viewDidLoad {
[super viewDidLoad];
UIView *footerContainer = [[UIView alloc] initWithFrame:CGRectZero];
footerContainer.backgroundColor=[UIColor greenColor];
footerContainer.translatesAutoresizingMaskIntoConstraints=NO;
[footerContainer addConstraints:@[[NSLayoutConstraint
constraintWithItem:footerContainer attribute:NSLayoutAttributeHeight relatedBy:NSLayoutRelationEqual
toItem:nil attribute:NSLayoutAttributeNotAnAttribute multiplier:1.0f constant:100
],
[NSLayoutConstraint
constraintWithItem:footerContainer attribute:NSLayoutAttributeWidth relatedBy:NSLayoutRelationEqual
toItem:nil attribute:NSLayoutAttributeNotAnAttribute multiplier:1.0f constant:[UIScreen mainScreen].bounds.size.width
]]];
self.mytableview.tableFooterView=footerContainer;
[self.view setNeedsLayout];
[self.view layoutIfNeeded];
}
- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section{
return 10;
}
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath{
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:@"cell"];
cell.textLabel.text=[NSString stringWithFormat:@"%ld",indexPath.row];
return cell;
}
しかし、結果は次のようになります:
は、ここに私の非常に簡単なコードです
あなたが気付いたよう、フッタは、テーブルビューの上部に表示されます。これはバグですか、何か不足していますか?
tableFooterViewをtableHeaderViewに変更すると、正常に動作します。だから私は同じことがフッタのために働くことを期待していたが、そうではない。
'translatesAutoresizingMaskIntoConstraints = NO'を設定すると、テーブルビューがフッタの位置を決めるために使用する方法を破る可能性が高くなります。 – dan
フッタービューに動的コンテンツを表示する(または表示する)可能性があるため、制約を使用していますか?もしそうなら、私はあなたにそれのための解決策を与えることができます... – DonMag
@DonMagはい私は手動でフレームを設定する代わりにそれを設定するために制約を使用するソリューションを探していました。私の実際のアプリは、フッターの動的なサイズのコンテンツを持っています。 –