这是一个UI布局问题.我需要在iPhone应用中的所有视图底部放置横幅广告.横幅广告是共享的,只有在可用时才会加载.
两个UIViewControllers包含占据全屏的UITableViews.我有两个相关的问题,我不知道如何解决.加载横幅广告时,它会隐藏表格视图的底部,阻止用户选择最后几个单元格中的任何一个.此外,右侧索引不再居中并且低于它应该的位置.
显然,如果在广告未加载的情况下有空白空格,Apple会拒绝某个应用(如果我错了,请更正我),因此如果没有广告,则需要将全貌视图全长可用.
有人解决了这个问题吗?什么可能是克服这个问题的最佳做法?谢谢!
xZe*_*non 13
我想通了,如何做到这一点的通常UITableViewController不使用自定义UIViewController与UITableView内部.诀窍是动态调整横幅视图的位置,使其始终位于可见区域的底部.
您只需将横幅视图添加为子视图并相应地调整表格插图:
- (void)viewDidLoad
{
[super viewDidLoad];
...
//init banner and set it's frame (here we use 320x50 banner)
self.bannerView = [[UIView alloc] init];
self.bannerView.frame = CGRectMake(0, self.view.frame.size.height - 50, 320, 50);
//add as subview
[self.view addSubview:self.bannerView];
//set proper bottom inset depending on your banner height
self.tableView.contentInset = UIEdgeInsetsMake(0, 0, 50, 0);
}
Run Code Online (Sandbox Code Playgroud)
滚动表格时,您需要根据内容偏移量调整横幅位置:
- (void)scrollViewDidScroll:(UIScrollView *)scrollView
{
//refresh banner frame during the scrolling
CGRect bannerFrame = self.bannerView.frame;
bannerFrame.origin.y = self.view.frame.size.height - 50 + self.tableView.contentOffset.y;
self.bannerView.frame = bannerFrame;
}
Run Code Online (Sandbox Code Playgroud)
UITableViewController如果您想在表视图之外还有其他视图,则不能使用。在a中,超类的属性UITableViewController是表视图,因此它默认占据整个屏幕。viewUIViewController
这里的方法是使用普通视图UIViewController,并将表视图和横幅视图添加为子视图。使用故事板的自动布局功能根据您设置的约束计算出精确的几何形状。当横幅为空时,表格视图可以自动展开。
您可以通过声明符合UITableViewDataSource和UITableViewDelegate协议的控制器类并将该类设置为表视图的委托来使表视图工作。