IOS - 如何使用自动布局有一个可滚动的表格视图标题
Posted
技术标签:
【中文标题】IOS - 如何使用自动布局有一个可滚动的表格视图标题【英文标题】:IOS - How to a have a scrollable tableview header using autolayout 【发布时间】:2017-05-10 10:43:03 【问题描述】:我想为我的个人应用重新创建 Spotify 应用的行为。
这是一种表格视图,但标题视图是动态大小的。默认情况下,标题具有最大尺寸,但是当用户滚动表格视图上方时,标题视图会动态松动高度,直到保持其最小尺寸。 headerview 应该始终保持可见。
这是显示我希望重现的行为的 GIF:http://giftrending.com/public/upload/gifs/14827016661482701665.gif
顺便说一句,我使用带有情节提要的自动布局来设置我的视图。
感谢您的帮助!
【问题讨论】:
如果可能的话,你能不能发一个 gif 来展示整个动画,很难确定使用前后图像的方法!但很可能可以通过使用UITableViewCell
和 UIView
来复制行为,并根据用户滚动的数量使用适当的动画!
显示代码,如何确定高度。
spotify 应用程序可能使用了一个集合视图。
@Rikh 这是 GIF:giftrending.com/public/upload/gifs/14827016661482701665.gif
【参考方案1】:
这不是一个优化的代码,但你可以试试这样的。
-(CGFloat)tableView:(UITableView *)tableView heightForHeaderInSection:(NSInteger)section
return headerHeight;
-(void)scrollViewDidScroll:(UIScrollView *)scrollView
CGFloat maxHeaderHeight = 400;
CGFloat minHeaderHeight = 40;
if (self.lastContentOffset > scrollView.contentOffset.y)
// scrolling down
if(headerHeight < maxHeaderHeight)
headerHeight += scrollView.contentOffset.y;
headerHeight = MIN(headerHeight, maxHeaderHeight);
else if (self.lastContentOffset < scrollView.contentOffset.y)
// scrolling up
if (headerHeight > minHeaderHeight)
headerHeight -= scrollView.contentOffset.y;
headerHeight = MAX(headerHeight, minHeaderHeight);
self.lastContentOffset = scrollView.contentOffset.y;
[self.tableView reloadData];
【讨论】:
谢谢你,我做了一些测试,它有时有效,但并非总是如此。确实有时,特别是在桌子的极值处。您的算法未评估“返回”效果。我继续我的测试^^以上是关于IOS - 如何使用自动布局有一个可滚动的表格视图标题的主要内容,如果未能解决你的问题,请参考以下文章
带有自动布局的 UIScrollView 中的 UITableViews