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 来展示整个动画,很难确定使用前后图像的方法!但很可能可以通过使用 UITableViewCellUIView 来复制行为,并根据用户滚动的数量使用适当的动画! 显示代码,如何确定高度。 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 - 如何使用自动布局有一个可滚动的表格视图标题的主要内容,如果未能解决你的问题,请参考以下文章

如何在 ios 中使用自动布局更改滚动视图内容大小

iOS自动布局:相等的空间以适应超级视图宽度[重复]

iOS:自动布局的问题。模拟器结果随着情节提要的变化而变化

带有自动布局的 UIScrollView 中的 UITableViews

如何在情节提要失败的情况下使用大量表格视图单元格和自动布局约束来布局复杂视图

自 IOS 8 以来使用自动布局和滚动视图的额外顶部空白