【发布时间】:2013-04-30 01:29:40
【问题描述】:
我目前有一个view controller,它由一个Navigation bar 组成,然后是一个UIView,其中添加了两个UIButtons 作为子视图。然后在下面有一个UITableView,从容器底部开始UIView。
目前,当用户滚动UITableView 时,它会落后于UIView 和UIButtons。我真正想要发生的是UIView 和UIButtons 与表格视图一起向上移动,但仅通过它们的高度值,在本例中为 58 像素。流程应该是这样的……
1) 表格滚动,UIView 随之移动前 58 个像素。
2) 用户继续滚动表格,但 UIView “pins” 本身在 navigation bar 下方不可见。
3) 当用户向下滚动表格时,UIView 会被拾取并拖回视图中。我相信新的 Facebook 应用在时间轴上做了类似的事情。
我不想将UIView 设置为表格的TableHeaderView,因为我还有一个下拉刷新,然后它位于按钮上方,看起来很糟糕。我尝试过使用表的底层scrollview 的contentOffset 属性,但遇到了障碍。
任何关于从哪里开始的建议将不胜感激。
谢谢
编辑:我更进一步并使用此代码移动 UIView 的框架。
-(void) scrollViewDidScroll:(UIScrollView *)scrollView
{
NSLog (@"Content Offset: %f", self.tableView.contentOffset.y);
NSLog (@"Button Frame: %f", self.btnBackground.frame.origin.y);
if (self.tableView.contentOffset.y > 0)
{
CGRect newFrame = self.btnBackground.frame;
newFrame.origin.x = 0;
newFrame.origin.y = -self.tableView.contentOffset.y;
[self.btnBackground setFrame: newFrame];
}
}
现在的问题是,如果快速滚动表格视图,scrollViewDidScroll 委托方法不会被足够快地触发。结果是 UIView 在快速滚动时并没有完全回到原来的位置。
【问题讨论】:
-
嘿,我正在尝试解决类似的问题。你有没有想过该怎么做? @paulmorris
-
嘿,我也遇到过类似的情况。设计者希望布局的行为与 Android 中的 CoordinatorLayout 完全相同。顺便说一句,你发现了吗?
标签: ios objective-c uitableview uiview scrollview