在UIScrollView中保持英雄横幅浮动

我收到了刚开始iOS开发的人们的一些要求,这些要求是关于如何在应用程序的“ Corky Notes”的“关于”页面中浮动英雄横幅:

实质上,上述效果是通过将UIView放置在UIScrollView之上而实现的,其中UIView的高度基于滚动值而动态变化。

这是结构的概述:

  1. UIScrollView放置在根视图中
  2. 容器视图填充UIScrollView-容器视图和UIScrollView之间的垂直空间约束必须设置为Hero Banner的高度
  3. 您所有的视图都在容器视图内。*
  4. 英雄横幅放置在UIScrollView顶部的“根视图”中。 在步骤2中为英雄横幅设置高度限制(即250)以及垂直空间限制

如上所述,一旦设置好布局,现在是时候开始连接出口和代表了。

  • 将UIScrollView的委托连接到其View Controller-您将在听滚动值
  • 参考英雄横幅的高度约束,以便您可以动态更改值(例如,constraintHeroBannerHeight)

在您的.swift文件中,通过添加UIScrollViewDelegate协议来修改UIViewController定义。

 类HeroViewController:UIViewController,UIScrollViewDelegate 

这将允许您覆盖UIScrollView方法。 但是首先,通过在视图初始化时获取constraintHeroBannerHeight常量值来存储默认横幅高度(即defaultBannerHeight),并在UIViewController的viewDidLoad方法中定义最小横幅高度(即minimumBannerHeight)。

  defaultBannerHeight =约束HeroBannerHeight.constant 
minimumBannerHeight = 80

覆盖scrollViewDidScroll方法:

  func scrollViewDidScroll(_ scrollView:UIScrollView){ 

}

当UIScrollView滚动时,它将反复调用scrollViewDidScroll方法。 每次发生这种情况时,您都将通过contentOffset属性获取“滚动”值。

当UIScrollView位于顶部时,偏移值为0;当其内容向下滚动时,偏移值为正。 您希望在用户向下滚动时“缩小”英雄横幅的高度,直到英雄横幅缩小到minimumBannerHeight,此时您将高度保持在minimumBannerHeight。

仅当偏移量小于minimumBannerHeight时,才将英雄横幅的高度减少滚动量。

 让offset = scrollView.contentOffset; 
如果offset.y <minimumBannerHeight {
constraintHeroBannerHeight.constant = defaultBannerHeight-offset.y
}

这就是使英雄横幅浮动的所有步骤。 这是示例中使用的.swift: