5

UITableView のフッターに UIButton を表示したい (ヘッダーとまったく同じである必要があります)。

このコードは、TableViewController の viewDidLoad にあります。

UIButton *footerShareButton = [UIButton buttonWithType:UIButtonTypeRoundedRect];
[footerShareButton setFrame:CGRectMake(10, 0, 70, 50)];
NSLog(@"%f", footerShareButton.frame.size.width);

[self.tableView setTableFooterView:footerShareButton];

NSLog(@"%f", footerShareButton.frame.size.width);
NSLog(@"%f", self.tableView.tableFooterView.frame.size.width);

ただし、このコードは機能しません。ボタンの幅が大きすぎます。320 です (高さは正しいですが)。最初の NSLog は 70 を出力し、2 番目と 3 番目の出力は 320 です。

テーブルフッターとして設定する前に、UIButtonを別のUIViewに配置することで、この問題を解決しました。

 UIButton *footerShareButton = [UIButton buttonWithType:UIButtonTypeRoundedRect];
 [footerShareButton setFrame:CGRectMake(10, 0, 70, 50)];

 UIView *aView = [[UIView alloc] initWithFrame:CGRectMake(10, 0, 70, 50)];
 [aView addSubview:footerShareButton];

 [self.tableView setTableFooterView:aView];
 [aView release];

これは機能し、ボタンの幅は正しくなります。

ただし、最初のコード サンプルが機能しない理由がわかりません。誰でも説明できますか?

4

2 に答える 2

19

フッター/ヘッダーとして追加するビューに設定した幅に関係なく、UITableViewその幅は常にテーブルの幅と同じになります。

したがって、あなたの場合、追加したビューのサイズは に変更されますCGRectMake(0, 0, 320, 50)が、ボタンは正しいフレームのままです。ボタンのフレームはビューに合わせて...

EDIT :
フッター/ヘッダーのフレームで設定したままの唯一のパラメーターは高さです。

テーブルに追加した後にヘッダー/フッター ビューの高さを変更しても、変更は行われないことに注意してください。テーブルに追加する前に高さを設定する必要があります...

于 2010-07-19T12:31:00.413 に答える
3

実際、この問題を克服しようとして私が遭遇した方法があります。

空の UIView 320x (ボタンの高さ) を作成し、この含まれているビューの中央にボタンを配置します。このようにして、ビュー内のボタンのサイズは変更されません。

お役に立てれば、

ジョナサン

于 2012-07-31T14:10:14.033 に答える