我在UIView
上方有一个重叠UITableview
。当我滚动UITableview
时,我希望叠加层UIView
以与UITableview
滚动相同的速度移动,就像facebook应用的顶层菜单一样。
有什么建议吗? 我尝试在uitableview的scroll delegate中更改叠加uiview的框架。如:
- (void)scrollViewWillBeginDragging:(UIScrollView *)scrollView {
self.lastOffsetY = scrollView.contentOffset.y;
}
- (void)scrollViewDidScroll:(UIScrollView *)scrollView {
CGFloat offset = self.lastOffsetOfY - scrollView.contentOffset.y;
CGRect frame = self.overlayview.frame;
frame.origin.y += offset;
self.overlayview.frame = frame;
self.lastOffsetOfY = scrollView.contentOffset.y;
}
只需使用contentoffset值的更改即可。但叠加uiview与uitableview滚动的移动方式不同。
答案 0 :(得分:2)
如果您只是希望UIView始终保持在屏幕顶部,独立于tableview,您只需将UIView添加到控制器的视图中,而不是将其添加到tableview中。
在你的XIB中,如果你正在使用它,你应该有类似
的东西VIEW
UITableView
UIView
而不是你可能拥有的东西:
VIEW
UITableView
UIView
答案 1 :(得分:1)
如果您正在尝试完成类似于Facebook应用的叠加层,那么将叠加层添加到包含UITableView / ScollView的超级视图会更高效。这样,您就不需要编写一堆需要在用户每次滚动时执行的代码。
//in your View Controller:
UITableView *table = [[[UITableview alloc] init] autorelease];
CGRect frame = CGRectMake (tableOriginX, tableOriginY, width, height);
UIView *overlay = [[[UIView alloc] initWithDesieredFrame: frame] autorelease];
这种方式视图永远不会移动,但会给出总是存在于TableView顶部的错觉。如果像Facebook一样,你希望关闭视图,你可以使用TableView的内部手势识别器来检测一个会消除或召唤叠加层的轻弹(如facebook)。
//Something like:
- (void)scrollViewWillEndDragging:(UIScrollView *)scrollView withVelocity:(CGPoint)velocity targetContentOffset:(inout CGPoint *)targetContentOffset
{
if (velocity.y > 0)
{
[self hideButtonPannelData];
}
if (velocity.y < -0.8)
{
[self revealButtonPannelData];
}