Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/k-lpmg/FlexibleHeader
A container view that responds to scrolling of UIScrollView
https://github.com/k-lpmg/FlexibleHeader
flexible-library headerview ios scrolling swift
Last synced: about 1 month ago
JSON representation
A container view that responds to scrolling of UIScrollView
- Host: GitHub
- URL: https://github.com/k-lpmg/FlexibleHeader
- Owner: k-lpmg
- License: mit
- Created: 2019-08-09T23:57:22.000Z (over 5 years ago)
- Default Branch: master
- Last Pushed: 2019-08-10T15:13:26.000Z (over 5 years ago)
- Last Synced: 2024-10-02T17:15:50.925Z (2 months ago)
- Topics: flexible-library, headerview, ios, scrolling, swift
- Language: Swift
- Homepage:
- Size: 33.2 KB
- Stars: 72
- Watchers: 6
- Forks: 6
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
- fucking-awesome-swift - FlexibleHeader - A container view that responds to scrolling of UIScrollView. (Libs / UI)
- awesome-swift - FlexibleHeader - A container view that responds to scrolling of UIScrollView. (Libs / UI)
- awesome-swift - FlexibleHeader - A container view that responds to scrolling of UIScrollView ` 📝 2 years ago ` (UI [🔝](#readme))
- awesome-swift - FlexibleHeader - A container view that responds to scrolling of UIScrollView. (Libs / UI)
README
# FlexibleHeader
[![Build Status](https://travis-ci.org/k-lpmg/FlexibleHeader.svg?branch=master)](https://travis-ci.org/k-lpmg/FlexibleHeader)
![Swift](https://img.shields.io/badge/Swift-5.0-orange.svg)
[![Cocoapods](https://img.shields.io/cocoapods/v/FlexibleHeader.svg?style=flat)](https://cocoapods.org/pods/FlexibleHeader)
[![Carthage compatible](https://img.shields.io/badge/Carthage-compatible-4BC51D.svg?style=flat)](https://github.com/Carthage/Carthage)
![Platform](https://img.shields.io/badge/Platform-iOS-lightgrey.svg)
[![License](https://img.shields.io/badge/license-MIT-green.svg)](https://github.com/k-lpmg/FlexibleHeader/blob/master/LICENSE)A container view that responds to scrolling of UIScrollView.
normal | threshold
--- | :---:
|- [FlexibleHeaderExecutantType](#FlexibleHeaderExecutantType)
- [Getting Started](#getting-started)
- [Progressive](#Progressive)
- [Installation](#Installation)## FlexibleHeaderExecutantType
The enum used in the FlexibleHeader class to determine the header type.
``` swift
public enum FlexibleHeaderExecutantType {
case normal
case threshold
case customThreshold(hiddenThreshold: CGFloat, showThreshold: CGFloat)
}
```### 1. normal
Header appears when offset Y of scroll is 0. In other cases, the Header is disappeared.
### 2. threshold
Unlike the normal type, the header can be appeared or disappeared in the middle of the scroll by the threshold.
### 3. customThreshold
You can set hidden threshold and show threshold to threshold type. The unit of threshold is the offset of UIScrollView.## Getting Started
### FlexibleHeaderScrollView
The container view that contains the UIScrollView and the FlexibleHeader is the easiest way to implement a FlexibleHeader.1. Create an instance of FlexibleHeaderScrollView.
``` swift
let flexibleHeaderScrollView = FlexibleHeaderScrollView(headerMaxHeight: 64, headerMinHeight: 0, headerExecutantType: .threshold)
flexibleHeaderScrollView.translatesAutoresizingMaskIntoConstraints = false
```2. Add subviews to the contentView in FlexibleHeaderScrollView.
``` swift
let topView = UIView()
topView.translatesAutoresizingMaskIntoConstraints = falselet bottomView = UIView()
bottomView.translatesAutoresizingMaskIntoConstraints = falsetopView.leadingAnchor.constraint(equalTo: flexibleHeaderScrollView.contentView.leadingAnchor).isActive = true
topView.topAnchor.constraint(equalTo: flexibleHeaderScrollView.contentView.topAnchor).isActive = true
topView.trailingAnchor.constraint(equalTo: flexibleHeaderScrollView.contentView.trailingAnchor).isActive = true
topView.heightAnchor.constraint(equalToConstant: 550).isActive = truebottomView.leadingAnchor.constraint(equalTo: flexibleHeaderScrollView.contentView.leadingAnchor).isActive = true
bottomView.topAnchor.constraint(equalTo: topView.bottomAnchor).isActive = true
bottomView.trailingAnchor.constraint(equalTo: flexibleHeaderScrollView.contentView.trailingAnchor).isActive = true
bottomView.heightAnchor.constraint(equalToConstant: 550).isActive = true
bottomView.bottomAnchor.constraint(equalTo: flexibleHeaderScrollView.contentView.bottomAnchor).isActive = true
```### FlexibleHeader
If you want to implement the FlexibleHeader functionality in your UIScrollView, use the FlexibleHeader class.1. Create an instance of UIScrollView.
``` swift
let scrollView = UIScrollView()
scrollView.translatesAutoresizingMaskIntoConstraints = false
```2. Create an instance of FlexibleHeader using an instance of UIScrollView.
``` swift
let flexibleHeader = FlexibleHeader(scrollView: scrollView, maxHeight: 64, minHeight: 0, executantType: .threshold)
flexibleHeader.translatesAutoresizingMaskIntoConstraints = false
```3. Configure a height NSLayoutConstraint of an instance of FlexibleHeader.
``` swift
let flexibleHeaderHeight = flexibleHeader.heightAnchor.constraint(equalToConstant: 50)
flexibleHeaderHeight.isActive = trueflexibleHeader.configure(heightConstraint: flexibleHeaderHeight)
```## Progressive
You can change the value(view properties, constant of NSLayoutConstraint) based on the start and end points as the scroll progress.### ProgressiveViewAttribute
``` swift
let flexibleHeader = FlexibleHeader(scrollView: scrollView, maxHeight: 128, minHeight: 0, executantType: .threshold)let initialAttribute = ProgressiveViewAttribute(view: flexibleHeader, progress: 0.0, alpha: 1.0)
let finalAttribute = ProgressiveViewAttribute(view: flexibleHeader, progress: 1.0, alpha: 0.0)
flexibleHeader.appendProgressiveViewAttribute(with: initialAttribute)
flexibleHeader.appendProgressiveViewAttribute(with: finalAttribute)
```### ProgressiveLayoutConstraintConstant
``` swift
let headerContentView = UIView()
headerContentView.translatesAutoresizingMaskIntoConstraints = false
headerContentView.backgroundColor = .yellowflexibleHeader.addSubview(headerContentView)
headerContentView.centerXAnchor.constraint(equalTo: flexibleHeader.centerXAnchor).isActive = true
headerContentView.centerYAnchor.constraint(equalTo: flexibleHeader.centerYAnchor).isActive = true
headerContentView.heightAnchor.constraint(equalToConstant: 64).isActive = true
```
``` swift
let headerContentViewWidth = headerContentView.widthAnchor.constraint(equalToConstant: 0)
headerContentViewWidth.isActive = truelet initialConstraintConstant = ProgressiveLayoutConstraintConstant(constraint: headerContentViewWidth, progress: 0.0, constant: 320)
let finalConstraintConstant = ProgressiveLayoutConstraintConstant(constraint: headerContentViewWidth, progress: 1.0, constant: 0)
flexibleHeader.appendProgressiveConstraintConstant(with: initialConstraintConstant)
flexibleHeader.appendProgressiveConstraintConstant(with: finalConstraintConstant)
```## Installation
#### CocoaPods (iOS 9+)
```ruby
platform :ios, '9.0'
use_frameworks!target '' do
pod 'FlexibleHeader'
end
```#### Carthage (iOS 9+)
```ruby
github "k-lpmg/FlexibleHeader"
```## LICENSE
These works are available under the MIT license. See the [LICENSE][license] file
for more info.[license]: LICENSE