Code Monkey home page Code Monkey logo

lazy-pop-swiftui's Introduction

Lazy Pop SwiftUI

Swiping on any part of the screen starts an interruptible pop animation to the previous view.

Forked from https://github.com/rishi420/SwipeRightToPopController and adapted for SwiftUI.

Also thanks to lyinsteve on this Reddit comment for suggesting I turn this into modifier.

App Store Demo

Download the Lazy Pop SwiftUI demo here!

Use

To make your view lazily poppable, just add the lazyPop() modifer to it.

struct DetailsViewWithLazyPop: View {
    var body: some View {
        Text("Lazy pop enabled. Swipe anywhere to dismiss.")
        .lazyPop()
    }
}

If you would like to toggle when the lazy pop is enabled, just pass it a boolean state.

struct DetailsViewWithToggleableLazyPop: View {
    @State var isEnabled: Bool = true
    var body: some View {
        Toggle(isOn: $isEnabled) {
            Text("Toggle lazy pop")
        }
        .lazyPop(isEnabled: $isEnabled)
    }
}

Gotchas

The current implementation does not play well with some SwiftUI modifiers like .ignoresSafeArea(). There is currently no known workaround. If you find anything related to this problem, you can write about it in this issue.

Install

Just inlude the two files under LazyPop in this repo. Here's a link to them https://github.com/joehinkle11/Lazy-Pop-SwiftUI/tree/master/Lazy%20Pop%20SwiftUI/Lazy%20Pop

If this gets enough use, I'll put this in a Swift Package or a Cocopod.

lazy-pop-swiftui's People

Contributors

joehinkle11 avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar

lazy-pop-swiftui's Issues

Broken in iOS 16.2

With NavigationStack, once you navigate to a view, swipe back, the navigationlink no longer works. You can only use the link once and then it does not work. Same result for .navigationDestination

When LazyPop is canceled, other actions in the view are disabled.

Hello there is a look like the following. LazyPop is active. The problem is as follows: The user can come back to the previous view by sliding from anywhere on the screen. But if the user gives up and cancels lazypop, the view locks. My "Test 2" button becomes unclickable. How can I solve this?

        Button(action: {
            // Actions:
            self.mode.wrappedValue.dismiss()
        }, label: {
            Text("Test 2")
        })
    }
    .lazyPop()
    .navigationBarHidden(true)
    .navigationBarBackButtonHidden(true)
    
}

The navigation bar display abnormal when cancel pop with `navigationBarHidden`

  • The example code is
struct Example: View {
    @State var selection = 0
    var body: some View {
        ZStack {
            Color.blue.edgesIgnoringSafeArea(.all)
        }
        .lazyPop()
        .frame(maxWidth: .infinity, maxHeight: .infinity)
        .edgesIgnoringSafeArea(.all)
        .navigationBarHidden(true)
    }
}
  • When swipe half then cancel swipe, the result is
    IMG_0722

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.