这是一个UI布局问题。我需要在iPhone应用中的所有视图底部放置横幅广告。横幅广告是共享的,只有在可用时才会加载。
两个UIViewControllers包含占据全屏的UITableViews。我有两个相关的问题,我不知道如何解决。加载横幅广告时,它会隐藏表格视图的底部,阻止用户选择最后几个单元格中的任何一个。此外,右侧索引不再居中,并且低于应有的值。
显然,如果在广告未加载的情况下有空白空格,Apple会拒绝某个应用(如果我错了,请更正我),因此需要将表格视图全长没有广告可用。
有人解决了这个问题吗?什么可能是克服这个问题的最佳做法?谢谢!
答案 0 :(得分: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);
}
滚动表格时,您需要根据内容偏移调整横幅位置:
- (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;
}
答案 1 :(得分:3)
经过一番研究后,我发现了如何解决这个问题。
在初始化表格视图后加载广告横幅时,它可以覆盖表格视图的底部,使这些隐藏的单元格无法选择。用户可以将视图向上滚动到足以看到它们,但是当释放滚动时,表视图会弹回原始视图,并且无法选择那些最底部的单元格。为了解决这个问题,我做了以下几点:
CGFloat padding = self.view.frame.size.height - (self.view.frame.size.height - (SharedAdBannerView.frame.size.height + self.toolbar.frame.size.height + 20));
UIEdgeInsets bottomPadding = UIEdgeInsetsMake(0, 0, padding, 0);
[self.riversTableView setContentInset:bottomPadding];
[self.riversTableView setScrollIndicatorInsets:bottomPadding];
答案 2 :(得分:1)
如果您希望在表格视图旁边有其他视图,则无法使用UITableViewController
。在UITableViewController
超类view
的{{1}}属性是表视图,因此它默认占据整个屏幕。
此处的方法是使用普通UIViewController
,并将表格视图和横幅视图添加为子视图。使用storyboard的自动布局功能根据您设置的约束确定精确的几何图形。当横幅为空时,表格视图可以自动展开。
通过声明控制器类符合UIViewController
和UITableViewDataSource
协议并将类设置为表视图的委托,可以使表视图工作。