我正在尝试更改UITableView的大小。我的视图底部有一则广告,当我滚动时,广告会随之滚动。我想知道如何更改UITableView的大小,以便广告将始终保留在视图的底部,无论是否滚动UITableView。我尝试过更改TableView框架的大小,但这不起作用。
- (void)viewDidAppear:(BOOL)animated
{
tableView.frame = CGRectMake()...
}
我也尝试在scrollViewDidScroll:选择器中更改它,但没有运气。反正我是否可以改变高度,以免与底部的广告冲突?谢谢!
答案 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