0

UITableViewのサイズを変更しようとしています。ビューの下部に広告があり、スクロールすると、広告も一緒にスクロールします。UITableViewがスクロールされているかどうかに関係なく、広告が常にビューの下部に表示されるように、UITableViewのサイズを変更するにはどうすればよいか疑問に思いました。TableViewのフレームのサイズを変更しようとしましたが、機能しません。

- (void)viewDidAppear:(BOOL)animated
{
 tableView.frame = CGRectMake()...
}

また、scrollViewDidScroll:セレクターで変更してみましたが、うまくいきませんでした。とにかく、下部の広告と競合しないように高さを変更できますか?ありがとう!

4

2 に答える 2

0

この問題を解決する簡単な方法は、UITableView に .XIB ファイルを使用し、Interface Builder を使用して高さを非常に簡単に変更することです。

IB ファイルがない場合は、この投稿を参照してください: UITableView の高さを動的にサイズ変更するにはどうすればよいですか?

于 2012-06-21T21:50:35.713 に答える
0

UITableViewControllers を使用しますself.view == self.tableView。必要な効果には兄弟ビュー(共通のスーパービューに追加された2つのビュー)が必要ですが、self.tableViewの「スーパービュー」がないため、これは問題です。

UITableView と広告ビューを 2 つのサブビューとして持つ新しい UIViewController サブクラスを作成する必要があります。テーブル ビューのデータ ソースとデリゲートの設定、コントローラーが表示されたときのテーブル ビュー セルの選択解除などを処理する必要があります。これはもう少し手間がかかり、注意が必要ですが、間違いなく実行可能です。

以下に簡単な例をまとめました。

// Header
@interface CustomTableViewController : UIViewController <UITableViewDelegate, UITableViewDataSource>
- (id)initWithStyle:(UITableViewStyle)tableViewStyle;

@property (nonatomic, readwrite, retain) UITableView* tableView;
@end

// Source
@interface CustomTableViewController()
@property (nonatomic, readwrite, assign) UITableViewStyle tableViewStyle;
@end

@implementation CustomTableViewController

@synthesize tableView;
@synthesize tableViewStyle = _tableViewStyle;

- (id)initWithStyle:(UITableViewStyle)tableViewStyle {
  if ((self = [super initWithNibName:nil bundle:nil])) {
    _tableViewStyle = tableViewStyle;
  }
  return self;
}

- (void)loadView {
  [super loadView];

  self.tableView = [[UITableView alloc] initWithStyle:self.tableViewStyle];
  self.tableView.autoresizingMask = (UIViewAutoresizingMaskFlexibleWidth
                                     | UIViewAutoresizingMaskFlexibleHeight);
  self.tableView.delegate = self;
  self.tableView.dataSource = self;
  [self.view addSubview:self.tableView];

  // Create your ad view.
  ...

  adView.autoresizingMask = (UIViewAutoresizingMaskFlexibleWidth
                             | UIViewAutoresizingMaskFlexibleTopMargin);
  [self.view addSubview:adView];

  [adView sizeToFit];
  self.tableView.frame = CGRectMake(0, 0, self.view.bounds.size.width, self.view.bounds.size.height - adView.frame.size.height);
  adView.frame = CGRectMake(0, self.view.bounds.size.height - adView.frame.size.height, self.view.bounds.size.width, adView.frame.size.height);

  [self.tableView reloadData];
}

- (void)viewDidUnload {
  self.tableView = nil;

  [super viewDidUnload];
}

- (void)viewWillAppear:(BOOL)animated {
  [super viewWillAppear:animated];
  NSIndexPath* selectedIndexPath = [self.tableView indexPathForSelectedRow];
  if (nil != selectedIndexPath) {
    [self.tableView deselectRowAtIndexPath:selectedIndexPath animated:animated];
  }
}

@end
于 2012-06-21T21:56:04.920 に答える