更改UIViewTable的大小以适应AdWhirl广告

时间:2012-06-21 21:33:57

标签: iphone objective-c ios xcode uitableview

我正在尝试更改UITableView的大小。我的视图底部有一则广告,当我滚动时,广告会随之滚动。我想知道如何更改UITableView的大小,以便广告将始终保留在视图的底部,无论是否滚动UITableView。我尝试过更改TableView框架的大小,但这不起作用。

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

我也尝试在scrollViewDidScroll:选择器中更改它,但没有运气。反正我是否可以改变高度,以免与底部的广告冲突?谢谢!

2 个答案:

答案 0 :(得分:0)

解决此问题的简单方法是使用UITableView的.XIB文件,然后使用Interface Builder轻松更改高度。

如果你没有IB档案,那么请仔细阅读这篇文章:How do I resize the UITableView's height dynamically?

答案 1 :(得分:0)

使用UITableViewControllers self.view == self.tableView。这是你的问题,因为你想要的效果需要兄弟视图(两个视图添加到一个普通的超级视图),但是self.tableView没有“superview”。

您必须创建一个新的UIViewController子类,它具有UITableView,您的广告视图为两个子视图。您需要处理诸如为表视图设置数据源和委托之类的事情,以及在控制器出现时取消选择表视图单元格。这是一项更多的工作,需要一些小心,但绝对可行。

我在下面拼凑了一个快速示例,可以帮助您入门:

// 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