Ecosyste.ms: Awesome

An open API service indexing awesome lists of open source software.

Awesome Lists | Featured Topics | Projects

https://github.com/parkgwangbeom/sheet

📑 Actionsheet with navigation features such as the Flipboard App
https://github.com/parkgwangbeom/sheet

actionsheet custom customactionsheet flipboard ios navigation navigationactionsheet navigationsheet popup sheet transition ui

Last synced: 2 days ago
JSON representation

📑 Actionsheet with navigation features such as the Flipboard App

Awesome Lists containing this project

README

        


Logo



Swift 4.0+


iOS 9.0


Version


Carthage Compatible


Platform


License



📑 SHEET helps you easily create a wide variety of action sheets with navigation features used in the Flipboard App



Example

## Installation

### CocoaPods
```bash
pod 'Sheet', '~> 0.7.0'
```

### Carthage
```bash
github "ParkGwangBeom/Sheet" ~> 0.7.0
```

### Manually

If you prefer not to use either of the aforementioned dependency managers, you can integrate Sheet into your project manually.

## Usage

Implementing the contents of a Sheet is similar to implementing an existing UICollectionViewController.
Simply make your view controller subclass of SheetContentsViewController.

```
import Sheet

class ViewController: SheetContentsViewController {

/// Sheet visible contents height. If contentSize height is less than visibleContentsHeight, contentSize height is applied.
override var visibleContentsHeight: CGFloat {
return 600
}

/// Give CollectionView a chance to regulate Supplementray Element
override func registCollectionElement() {
let nib = UINib(nibName: "TitleHeaderView", bundle: nil)
collectionView?.register(nib, forSupplementaryViewOfKind: SheetLayoutElement.header.kind, withReuseIdentifier: SheetLayoutElement.header.id)
}

/// Provide an opportunity to set default settings for collectionview custom layout
override func setupSheetLayout(_ layout: SheetContentsLayout) {
layout.settings.itemSize = { indexPath in
let height: CGFloat = indexPath.section == 0 ? 30 : 60
return CGSize(width: UIScreen.main.bounds.width, height: height)
}
layout.sectionInset = UIEdgeInsets(top: 0, left: 0, bottom: 15, right: 0)
layout.settings.headerSize = CGSize(width: UIScreen.main.bounds.width, height: 60)
layout.settings.isHeaderStretchy = true
}

override func collectionView(_ collectionView: UICollectionView, numberOfItemsInSection section: Int) -> Int {
return 10
}

override func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell {
let cell = collectionView.dequeueReusableCell(withReuseIdentifier: "cell", for: indexPath)
...
return cell
}

override func collectionView(_ collectionView: UICollectionView, didSelectItemAt indexPath: IndexPath) {
...
}

...
}
```

You can use the custom action sheet transition using the default api provided by UIKit such as present, push, pop.
> 🔥 **However, do not use the dismiss of the NavigationController, but use the close (duration: completion :) function.**
```
// present
let contentsViewController = ViewController()
let sheetNavigation = SheetNavigationController(rootViewController: contentsViewController)
present(sheetNavigation, animated: true, completion: nil)

// push
let nextContentsViewController = NextContentsViewController()
navigationController?.pushViewController(nextContentsViewController, animated: true)

// pop
navigationController?.popViewController(animated: true)
```
**See the Example project for more details.**

## Layout
**Sheet** basically has Navigation structure. All children should inherit from **SheetContentsViewController**. SheetContentsViewController inherits **UICollectionViewController** by default, and its layout is like the following image.


layout

**Please refer to Example Code for detailed setting of image layout.**

## Advanced
Easily customizable by SheetContents.

### Options

| Property | Type | Default Value |
| -------- | --- | --- |
| `defaultToolBarBackgroundColor` | `UIColor` | `.black` |
| `sheetToolBarHeight` | `CGFloat`| `50`|
| `isSheetToolBarHidden` | `Bool` | `false`|
| `cornerRadius` | `CGFloat` | `0`|
| `defaultVisibleContentHeight` | `CGFloat` | `240`|
| `dimmingViewBackgroundColor` | `UIColor` | `.black.withAlphaComponent(0.3)`|
| `sheetBackgroundColor` | `UIColor` | `.white`|
| `presentTransitionType` | `SheetPresentTransitionType` | `.scale`|

### Layout Settings

| Property | Type |
| -------- | --- |
| `headerSize` | `CGSize?` |
| `footerSize` | `CGSize?`|
| `itemSize` | `((IndexPath) -> CGSize)?` |
| `sectionHeaderSize` | `((IndexPath) -> CGSize)?` |
| `sectionFooterSize` | `((IndexPath) -> CGSize)?` |

### SheetContentsViewController

| Property | Type |
| -------- | --- |
| `sheetToolBar` | `UIView` |

| Method | Explanation |
| -------- | --- |
| `func registCollectionElement()` | `Give CollectionView a chance to regulate Supplementray Element` |
| `func setupSheetLayout()` | `Provide an opportunity to set default settings for collectionview custom layout`|
| `func reload()` | `Help reload CollectionView and adjust the height of the content.`|
| `func close(completion: (() -> Void)? = nil)` | `Sheet Dismiss`|

### Custom ToolBar

The built-in toolbar consists of a single button.

| Default ToolBar |
|------- |
| |

Setting up a Custom ToolBar is very simple.
```
sheetToolBar = CustomToolBar()
```

## Author

- GwangBeom Park ([@gwangbeom](https://github.com/ParkGwangBeom))

## License

Sheet is released under the MIT license. See LICENSE for details.